这是用于观察AppWidgetProvider中的LiveData的正确LifeCycleOwner [英] Which is the correct LifeCycleOwner to be used to observe LiveData in AppWidgetProvider
本文介绍了这是用于观察AppWidgetProvider中的LiveData的正确LifeCycleOwner的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要在 AppWidgetProvider
中观察一些 LiveData
(在 onUpdate
期间).我想知道,以下哪个更适合使用 LifeCycleObserver
?
I need to observe some LiveData
in AppWidgetProvider
(During onUpdate
). I was wondering, which of the following is a more appropriate LifeCycleObserver
to be used?
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.LifecycleRegistry;
import android.support.annotation.NonNull;
public enum ForeverStartLifecycleOwner implements LifecycleOwner {
INSTANCE;
private final LifecycleRegistry mLifecycleRegistry;
ForeverStartLifecycleOwner() {
mLifecycleRegistry = new LifecycleRegistry(this);
mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
}
@NonNull
@Override
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
}
或者,我应该使用 ProcessLifecycleOwner.get()
吗?
两者都能正常工作.但是,哪个更合适?
Both works fine. But, which one is more appropriate?
推荐答案
最后,我坚持使用以下解决方案.据我所知,它没有任何实时崩溃报告,也没有收到客户的投诉.但是,如果您知道更好的方法,请告诉我.
Finally, I stick with the following solution. It works fine so far as I don't see any live crash report, or receiving complains from customers. However, if you know a better way, please let me know.
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.LifecycleRegistry;
import android.support.annotation.NonNull;
public enum ForeverStartLifecycleOwner implements LifecycleOwner {
INSTANCE;
private final LifecycleRegistry mLifecycleRegistry;
ForeverStartLifecycleOwner() {
mLifecycleRegistry = new LifecycleRegistry(this);
mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
}
@NonNull
@Override
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
}
用法
public static <T> void ready(LiveData<T> liveData, LifecycleOwner lifecycleOwner, Callable<T> callable) {
T t = liveData.getValue();
if (t != null) {
callable.call(t);
return;
}
liveData.observe(lifecycleOwner, new Observer<T>() {
@Override
public void onChanged(@Nullable T t) {
liveData.removeObserver(this);
callable.call(t);
}
});
}
public static void onUpdate(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
MediatorLiveData<Result> resultLiveData = getResultLiveData(appWidgetId);
ready(resultLiveData, ForeverStartLifecycleOwner.INSTANCE, result -> onUpdate(context, appWidgetManager, result.stickyNoteConfig, result.note));
}
这篇关于这是用于观察AppWidgetProvider中的LiveData的正确LifeCycleOwner的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文