2013-01-10 105 views
1

我有一個股票市場跟蹤Android應用程序,它附帶一個AppWidget來顯示價格。通常情況下,它可以正常工作,儘管在啓動後第一次加載時似乎遇到了一些麻煩。AppWidget引導問題(應用程序在初始化過程中重新啓動)

了裝載順序應該是這樣工作的:

  1. 電話靴子
  2. AppWidget onUpdate調用。
  3. AppWidget從互聯網上需要的數據,開始從網上拉報價服務:

    Log.d("PortfolioMap", "Widget is requesting a MANUAL_UPDATE"); 
    Intent newIntent = new Intent(context.getPackageName() + ".MANUAL_UPDATE"); 
    context.startService(newIntent); 
    
  4. 在網上更新完成,高速緩存結果定製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); 
    
  5. 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秒的延遲(的onCreateApplication類在步驟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) 

回答

0

我已經有一些與主要設備製造商打交道的經驗,並且親自觀察了這一點。有人評論說,在系統引導時,操作系統沒有足夠的分配內存,並被迫終止任何活動進程,並在完成初始化操作系統時重新分配它們。這可能很好地解釋你的觀察。

相關問題