解決LiveData observe 處于未激活時無法收到消息

/**
 * 自定訂閱 消息不中斷的LiveData
 */
class EventMutableLiveData<T> : MutableLiveData<T>(), LifecycleObserver {
    private val map = hashMapOf<LifecycleOwner, ArrayList<Observer<in T>>>()
    override fun observe(owner: LifecycleOwner, observer: Observer<in T>) {
//        super.observe(owner, observer)
        map[owner] = map[owner] ?: arrayListOf()
        map[owner]?.add(observer)
        observeForever(observer)
        /**
         * 綁定生命周期
         */
        owner.lifecycle.addObserver(this)
    }

    /**
     * 銷毀的時候清除LifecycleOwner下的所有訂閱者
     */
    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    fun onDestroy(owner: LifecycleOwner) {
        for (key in map.keys) {
            if (owner == key) {
                map.remove(key)?.forEach { removeObserver(it) }
                owner.lifecycle.removeObserver(this)
                break
            }
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。