2013-12-13 61 views
2

我希望我的小部件在重新啓動手機後立即顯示其最後的數據(圖像和文本)。重新啓動後,我的小部件的AppWidgetProvider.onUpdate()被調用,我在那裏成功更新它。但是,在實際調用onUpdate()之前可能需要相當長的時間。重新啓動後,主屏幕首先出現,我的小部件顯示默認佈局長達30秒。最後調用onUpdate(),小部件會自動更新。我也嘗試聽取BOOT_COMPLETED的意圖,但是它只需要小部件接收它就需要很長時間。啓動後立即還原小部件狀態

AccuWeather小工具如何做到這一點?主屏幕出現後,AccuWeather立即顯示其最新內容。它在恢復之前沒有很長的初始延遲。有沒有辦法將數據動態保存到佈局中,以便在啓動時立即獲取數據?

編輯:我確定我提到的AccuWeather小工具實際上是三星在手機上包含的東西。它可能會掛載到操作系統中以提前加載。當我嘗試使用Play商店中的小部件時,它們在更新內容之前似乎都有延遲。它看起來像我將不得不忍受的事情,但如果有人有想法,我會很感激。

+0

你是什麼意思「動態保存數據到佈局」? – Naddy

+0

@Naddy,對於我模糊的措辭感到抱歉。我開始假設(如果我錯了,我會很高興),我不能動態更改或替換項目中提供的原始小部件佈局文件。我希望我可以生成一個嵌入數據的佈局,並以某種方式讓widget在啓動時使用這種佈局。我正在尋找另一種方法來更新除'onUpdate()'之外的小部件,它在啓動期間具有延遲效果。 – UrbanMetro

回答

1

我在2013年發佈了我的問題,當時4.3 Jelly Bean仍然是流行的系統,4.4 KitKat剛剛開始推出。我發現KitKat大大減少了啓動時間,足夠的延遲,直到小部件更新是可以接受的。

1

你必須建立在你的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 
    } 
+0

我已經知道'BOOT_COMPLETED'了,我在原來的問題中提到過它。我的問題不是關於如何在啓動後更新小部件,而是如何在啓動序列期間更新_earlier_。 – UrbanMetro

+0

我的小部件在啓動完成後更新了30秒的延遲,但是通過使用bootupReceiver,我的小部件僅在2秒或3秒內更新! –