我希望我的小部件在重新启动手机后立即显示其最后的数据(图像和文本)。重启后,我的小部件AppWidgetProvider.onUpdate()
被调用,我在那里成功更新了它。但是,在实际调用onUpdate()
之前可能需要相当长的时间。重新启动后,主屏幕首先出现,我的小部件显示其默认布局长达30秒。最后调用onUpdate()
并且小部件自行更新。我也尝试过听BOOT_COMPLETED
意图,但是在小部件收到它之前需要很长时间。
AccuWeather小部件如何做到这一点?一旦出现主屏幕,AccuWeather会立即显示其最后的内容。它在恢复之前没有很长的初始延迟。有没有办法将数据动态保存到布局中,以便在启动时立即拾取数据?
编辑:我确定我提到的AccuWeather小部件实际上是三星在手机上包含的内容。它可能已经挂钩进入操作系统以便尽早加载。当我从Play商店尝试小部件时,所有这些小部件在启动之后似乎都有延迟,然后才更新其内容。它看起来像我将不得不忍受的东西,但如果有人有想法,我会很感激。
答案 0 :(得分:2)
您必须在Manifest.xml中创建一个启动完成接收器,如下所示:
<receiver
android:name=".BootUpReceiver"
android:enabled="true"
android:exported="false" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="com.example.boot" />
</intent-filter>
</receiver>
然后在BootUpReceiver.java中,您可以获取所有应用小部件ID并更新它们:
AppWidgetManager widgetManager = AppWidgetManager.getInstance(context);
ComponentName widgetComponent = new ComponentName(context,MyWidgetProvider.class);
int[] appWidgetIds = widgetManager.getAppWidgetIds(widgetComponent);
for(int i=0;i<appWidgetIds.length;i++) {
//Updating code here
}
答案 1 :(得分:1)
我在2013年发布了我的问题,当时4.3 Jelly Bean仍然是普遍的系统,4.4 KitKat刚刚开始推出。我发现KitKat显着减少了启动时间,足以让小部件更新之前的延迟是可以接受的。