我有一個股票市場跟蹤Android應用程序,它附帶一個AppWidget來顯示價格。通常情況下,它可以正常工作,儘管在啓動後第一次加載時似乎遇到了一些麻煩。AppWidget引導問題(應用程序在初始化過程中重新啓動)
了裝載順序應該是這樣工作的:
- 電話靴子
- AppWidget
onUpdate
調用。 AppWidget從互聯網上需要的數據,開始從網上拉報價服務:
Log.d("PortfolioMap", "Widget is requesting a MANUAL_UPDATE"); Intent newIntent = new Intent(context.getPackageName() + ".MANUAL_UPDATE"); context.startService(newIntent);
在網上更新完成,高速緩存結果定製
Application
類,火sendBroadcast
到AppWidget接收刷新數據。Log.d("PortfolioMap", "Updating portfolio with results for " + updateData.size() + " stocks with value " + dbgValue); Intent newIntent = new Intent(getPackageName() + ".DATA_UPDATE_COMPLETE"); this.sendBroadcast(newIntent);
AppWidget接收廣播,調用onUpdate來繪製新數據。
public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); Log.d("PortfolioMap", "Widget received broadcast " + intent.getAction()); ... this.onUpdate(context, appWidgetManager, ids); }
在現實中會發生什麼情況是,步驟4(DATA_UPDATE_COMPLETE廣播發送),和步驟5之間(接收DATA_UPDATE_COMPLETE廣播),存在其中我的應用程序重新啓動一個約10秒的延遲(的onCreate
Application
類在步驟4)之後被第二次調用。
使用新的PID重新啓動應用程序後,仍會收到第一個應用程序實例發送的廣播,但此時應用程序數據已被清除。
有沒有人有一個想法,爲什麼我的應用程序將在加載過程中得到重置,以及爲什麼即使在應用程序重置後也收到廣播?這對我來說似乎很陌生。在摩托羅拉廣播ACTION_WIDGET_ADDED
之後,重啓總是會立即發生,但我不確定這是相關還是意味着什麼。
這是我的日誌。注意PID在最後三行中的變化,並且它說第二次「應用程序正在創建」。
21:37:55.347: D/PortfolioMap(4299): Application is being created
21:37:55.467: D/PortfolioMap(4299): Widget received broadcast android.appwidget.action.APPWIDGET_ENABLED
21:37:55.477: D/PortfolioMap(4299): Widget onUpdate called
21:37:55.477: D/PortfolioMap(4299): Widget is requesting a MANUAL_UPDATE
21:37:55.497: D/PortfolioMap(4299): InternetUpdater received broadcast MANUAL_UPDATE
21:37:55.927: D/PortfolioMap(4299): Updating portfolio with results for 3 stocks with value 8973.326
21:38:05.337: D/PortfolioMap(4299): Widget received broadcast com.motorola.blur.home.ACTION_WIDGET_ADDED
21:38:18.417: D/PortfolioMap(4778): Application is being created
21:38:18.497: D/PortfolioMap(4778): Widget received broadcast com.karwosts.PortfolioMap.DATA_UPDATE_COMPLETE
21:38:18.497: D/PortfolioMap(4778): Starting widget redraw with portfolio 'All Portfolios' (value:0.0)