2

AlarmManager生成されたブロードキャストでアプリウィジェットを更新するのはあまりうまくいきません。これが私がすることです:

で初期AlarmManagerAppWidgetProvider#onEnabled

AlarmManager alarms = (AlarmManager) context.getSystemService(
        Context.ALARM_SERVICE);
    alarms.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
    SystemClock.elapsedRealtime(), 60000, pendingIntent);

また、によって起動された更新を単にリッスンするブロードキャストレシーバーを定義しますAlarmManagerAsyncTask更新が実行されると、ネットワーク呼び出しを行うコードが実行されます。AsyncTaskが完了すると()onPostExecute、以前に取得したインスタンスを使用しAppWidgetManagerてウィジェットを更新します。ログにメッセージが表示されるまで、すべてが実際に正常に実行されます。"Process com.foo.myapp (pid 12345) has died"その後、AlarmManager別の更新が実行されることはありません。

アラームを再開する何らかのチェックが必要ですか?たとえば、ユーザーがウィジェットの親アプリにアクセスする場合はどうなりますか?リクエストの途中でアプリが停止した場合に、長時間実行されるタスクを完了してウィジェットに戻ることができるようにするにはどうすればよいですか?

4

1 に答える 1

4

更新が開始されると、コードはネットワーク呼び出しを行う AsyncTask を実行します。

これが 内にある場合BroadcastReceiver、それは機能しません。からスレッドを安全にフォークすることはできず、スレッドBroadcastReceiverAsyncTask効果的にフォークしてタスクを非同期的に実行します。

代わりに、アラームから開始され たサービスに長時間実行される作業を委任する必要がありますBroadcastReceiver

于 2009-12-08T04:55:46.397 に答える