1

株式市場を追跡する Android アプリケーションを持っていて、価格を表示する AppWidget が付属しています。通常は正常に動作しますが、起動後の最初のロードで問題が発生しているようです。

ロード シーケンスは次のように動作するはずです。

  1. 電話ブーツ
  2. AppWidgetonUpdateが呼び出されました。
  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 秒の遅延があります (onCreateクラスApplicationはステップ 4 の後に 2 回呼び出されます)。

アプリケーションが新しい PID で再起動された後も、アプリケーションの最初のインスタンスによって送信されたブロードキャストを受信しますが、この時点でアプリケーション データは消去されています。

ロード中にアプリケーションがリセットされる理由と、アプリケーションがリセットされた後でもブロードキャストが受信される理由を知っている人はいますか? これは私には非常に奇妙に思えます。再起動は常に Motorola 放送の直後に行われるようACTION_WIDGET_ADDEDですが、それが関連しているのか、それが何を意味するのかはわかりません。

これが私のログです。最後の 3 行で PID がどのように変化するかに注意してください。「アプリケーションが作成されています」というメッセージが 2 度目に表示されます。

 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)
4

1 に答える 1