是否可以在AppWidgetProvider中使用LiveData

问题描述 投票:0回答:1

在我的旧应用程序中,这是我在AppWidgetProvideronUpdate函数中执行耗时的I / O操作的方式。

public class MyAppWidgetProvider extends AppWidgetProvider {
    private static ExecutorService thread_executor = java.util.concurrent.Executors.newFixedThreadPool(1);

    @Override
    public void onUpdate(
        Runnable runnable = ...
        thread_executor.execute(runnable);

我认为这不是一个好方法,尤其是Android 8。

我喜欢LiveData概念,因为我们不需要明确地处理线程。然而,它使我们能够执行耗时的操作,而不会阻塞主线程。

我想知道,是否有可能使用LiveData,并附加一个Observer来执行耗时的I / O操作(如从SQLite数据库读取),在AppWidgetProvider内?

我不知道该怎么做,因为我不知道如何在LifecycleOwner得到AppWidgetProvider,观察LiveData

android android-architecture-components
1个回答
0
投票

是的,您可以在AppWidgetProvider中使用LiveData。获得LifecycleOwner有两种方式(我知道):

  1. 你可以打电话给ProcessLifecycleOwner.get()
  2. 你可以从this answer复制这个例子。

这两种方法都有效,您可以自行选择要使用的方法。

BUT:

你不需要LifecycleOwner,你可以使用liveData.observeForever(Observer)。事实上,如果您使用LifecycleOwner,它可能会引入一些错误:当所有者移动到DESTROYED状态时,您的观察者将不会被称为1

你不应该忘记打电话给liveData.removeObserver(Observer)

© www.soinside.com 2019 - 2024. All rights reserved.