LiveData 订阅者更改事件

LiveData subscriber changed event

LiveData 对象的所有者是否可以侦听 LiveData 的新 subscribtions/desubscriptions 并对此事件做出反应?

我有一个场景,如果有活跃的听众,所有者将做一些后台工作 - 否则不会。

处理此类用例的常用方法是扩展 LiveData 并覆盖 onActive and onInactive methods like it's done here。当 LiveData 本身在变为活动/非活动状态时应该执行一些操作时,这更适合,但它也应该很容易为 LiveData 创建一个包装器,它将 isActive 值公开为 属性 ,类似的东西应该可以工作:

class LiveDataWithState<T>(wrapped: LiveData<T>) : MediatorLiveData<T>() {
    private val _isActive = MutableLiveData(false)
    val isActive: LiveData<Boolean> get() = _isActive

    init {
        addSource(wrapped) { value = it }
    }

    override fun onActive() {
        super.onActive()
        _isActive.value = true
    }

    override fun onInactive() {
        super.onInactive()
        _isActive.value = false
    }
}