gpt4 book ai didi

java - 如何暂停 onCreate 直到启动完成?

转载 作者:行者123 更新时间:2023-12-02 04:46:08 24 4
gpt4 key购买 nike

我在我的应用程序中托管小部件,似乎如果我在设备启动完成之前启动我的应用程序,则无法正确创建小部件。然后小部件似乎未完全加载或未正确初始化/更新。例如:BatteryBotIndicator-Widget,以百分比显示电池状态,显示值“XX”而不是“70%”等数字。如果我然后重新启动我的应用程序并尝试使用以下命令重新创建小部件:

AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appWidgetId);

它为我的 appWidgetInfo 提供了 null(我从 SQLite 数据库获取 appWidgetId)。并且无法重新创建小部件。

在这种情况下调试真正的原因以找出到底是什么导致了这种情况(在正确的时间启动调试器)是有点困难的。我假设 AppWidgetManager 还没有准备好或者什么的。

我可以肯定地说:如果我等到收到广播事件 BOOT_COMPLETED,所有小部件都会正确创建。

那么如何暂停 onCreate 的执行,直到启动完成?

我可以考虑让线程在 while 循环中 hibernate ,直到 BroadcastReceiver (BOOT_COMPLETED) 将应用程序数据中的 bool 变量设置为 true。但我不想总是在我的应用程序启动时等待这个事件,正如你可以想象的;)

最佳答案

if i start my app before booting of the device is completed, widgets cannot be created properly.

当您说“不正确”时,请详细解释一下您到底是什么意思。这可能有助于了解您的小部件是否真的依赖于与启动相关的东西。

I can think of putting the thread to sleep in a while loop until the BroadcastReceiver (BOOT_COMPLETED) is setting a bool-variable in application-data to true

非常糟糕的主意..也来自性能和设计原因

相反,为什么不简单地注册以从 list 启动完整的广播,并且当您收到它时 - 只需发送相关的广播来更新您的小部件? AppWidgetProvider 已经扩展了 BroadcastReceiver,因此您只需添加它的 Intent 过滤器即可启动完成广播。

这是如何添加 Intent 过滤器以完成启动:

 <receiver android:name="MyWidgetProvider" >
<intent-filter >
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>

<meta-data
...
</receiver>

这是小部件提供程序实现对此使用react的方式:

  @Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){
doTheUpdateHereExactlyLikeHowYouUpdateItFromAnywhereElse();
} else {
super.onReceive(context,intent);
}
}

了解更多信息 - 请按照本教程操作:https://laaptu.wordpress.com/2013/08/12/android-update-app-widget-with-listview-after-phone-reboot/

关于java - 如何暂停 onCreate 直到启动完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29647010/

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