启动后立即恢复小部件状态

时间:2013-12-13 23:35:56

标签: android widget boot

我希望我的小部件在重新启动手机后立即显示其最后的数据(图像和文本)。重启后,我的小部件AppWidgetProvider.onUpdate()被调用,我在那里成功更新了它。但是,在实际调用onUpdate()之前可能需要相当长的时间。重新启动后,主屏幕首先出现,我的小部件显示其默认布局长达30秒。最后调用onUpdate()并且小部件自行更新。我也尝试过听BOOT_COMPLETED意图,但是在小部件收到它之前需要很长时间。

AccuWeather小部件如何做到这一点?一旦出现主屏幕,AccuWeather会立即显示其最后的内容。它在恢复之前没有很长的初始延迟。有没有办法将数据动态保存到布局中,以便在启动时立即拾取数据?

编辑:我确定我提到的AccuWeather小部件实际上是三星在手机上包含的内容。它可能已经挂钩进入操作系统以便尽早加载。当我从Play商店尝试小部件时,所有这些小部件在启动之后似乎都有延迟,然后才更新其内容。它看起来像我将不得不忍受的东西,但如果有人有想法,我会很感激。

2 个答案:

答案 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显着减少了启动时间,足以让小部件更新之前的延迟是可以接受的。