/**
* 自定訂閱 消息不中斷的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
}
}
}
}
解決LiveData observe 處于未激活時無法收到消息
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。