在我的旧应用中,这就是我在android:id="@+id/root_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:fitsSystemWindows="false">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/forgot_screen_send_button"
android:layout_width="100dp"
android:layout_height="45dp"
android:layout_marginLeft="30sp"
android:layout_marginRight="30dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="20dp"
android:layout_gravity="center_horizontal"
android:background="@drawable/blue_color_bg_rec"
android:text="Send"
android:layout_alignParentBottom="true"
android:textColor="@color/white"
android:textAllCaps="false"
android:textSize="18sp"/>
</LinearLayout>
</LinearLayout>
的{{1}}函数中执行耗时的I / O操作的方式。
AppWidgetProvider
我认为这不是一个好方法,尤其是对于Android 8而言。
我喜欢onUpdate
概念,因为我们不需要显式处理线程。但是,它使我们能够执行耗时的操作而不会阻塞主线程。
我想知道,是否可以在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);
内使用LiveData
并附加一个LiveData
来执行耗时的I / O操作(例如从SQLite数据库中读取)?
我不确定如何做到这一点,因为我不知道如何在Observer
中获得AppWidgetProvider
来观察LifecycleOwner
。
答案 0 :(得分:0)
是的,您可以在AppWidgetProvider中使用LiveData。 (我知道)有两种获取LifecycleOwner的方法:
ProcessLifecycleOwner.get()
。这两种方法均有效,由您选择要使用的方法。
您不需要LifecycleOwner,可以使用liveData.observeForever(Observer)
。实际上,如果使用LifecycleOwner,它可能会引入一些错误:当所有者移至DESTROYED状态时,您的观察者将不会被称为 1 。
您不应忘记致电liveData.removeObserver(Observer)
。