gpt4 book ai didi

android - 哪个是用于在 AppWidgetProvider 中观察 LiveData 的正确 LifeCycleOwner

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:17:22 27 4
gpt4 key购买 nike

我需要在 AppWidgetProvider 中观察一些 LiveData(在 onUpdate 期间)。我想知道,以下哪个是更合适的 LifeCycleObserver

ForeverStartLifecycleOwner(自定义)

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() 吗?

两者都很好。但是,哪个更合适呢?

最佳答案

最后,我坚持使用以下解决方案。到目前为止,它工作正常,因为我没有看到任何实时崩溃报告,也没有收到客户的投诉。但是,如果您知道更好的方法,请告诉我。

ForeverStartLifecycleOwner

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));
}

关于android - 哪个是用于在 AppWidgetProvider 中观察 LiveData 的正确 LifeCycleOwner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52613387/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com