我们知道,要监听Worker Manager的返回,要使用如下方法:
WorkManager.getInstance(this).getWorkInfoByIdLiveData(request.getId())
.observe(LifecycleOwner, new Observer() {}
但是我们的WorkManager并不总是写在Activity或者Fragment中,一般好的架构中,WorkManager很少直接在View中写,那么这么情况下如何监听其返回值呢?
如果你去网上搜索,各路神仙都会告诉你,可以使用MediatorLiveData来监听。MediatorLiveData的addSource接口中,不需要LifecycleOwner就可以监听livedata的变化。于是你去定义一个全局变量,例如
private val result = MediatorLiveData<Result()
用它来监听worker:
val workerInfo = FriendWorkerFactory.startFriendListWorker(app)
result.addSource(workerInfo) {
}
那么恭喜你入坑了,你去调式,会很郁闷地发现为啥onChange老是走不到呢?
实际上,MediatorLiveData也是需要LifecycleOwner的!
我们看其源码:
@MainThread
public <S> void addSource(@NonNull LiveData<S> source, @NonNull Observer<? super S> onChanged) {
Source<S> e = new Source<>(source, onChanged);
Source<?> existin