这是用于观察AppWidgetProvider中的LiveData的正确LifeCycleOwner [英] Which is the correct LifeCycleOwner to be used to observe LiveData in AppWidgetProvider

查看:152
本文介绍了这是用于观察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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆