在我的旧应用程序中,这是我在AppWidgetProvider
的onUpdate
函数中执行耗时的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
。
是的,您可以在AppWidgetProvider中使用LiveData。获得LifecycleOwner有两种方式(我知道):
ProcessLifecycleOwner.get()
。这两种方法都有效,您可以自行选择要使用的方法。
你不需要LifecycleOwner,你可以使用liveData.observeForever(Observer)
。事实上,如果您使用LifecycleOwner,它可能会引入一些错误:当所有者移动到DESTROYED状态时,您的观察者将不会被称为1。
你不应该忘记打电话给liveData.removeObserver(Observer)
。