質問

私はAlarmManager生成された放送でアプリウィジェットを更新すると多くの幸運を持っていませんよ。ここで私は何をすべきかです。

AlarmManagerAppWidgetProvider#onEnabledの初期化

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

私はまた、単にAlarmManagerによる解雇の更新をリッスン放送受信機を定義します。更新が発射された場合のコードは、ネットワーク呼び出しを行うAsyncTaskを実行します。 AsyncTaskが完了すると(onPostExecute)は、ウィジェット(単数または複数)を更新するAppWidgetManagerの以前に得られたインスタンスを使用します。 ログに私は"Process com.foo.myapp (pid 12345) has died"は別のアップデートを起動しませんその後のメッセージAlarmManagerが表示されるまで、それはすべてが実際にうまく動作します。

私はアラームを再起動しますチェックのいくつかの並べ替えを持っている必要がありますか?たとえば、ユーザーがウィジェットの親アプリにアクセスしたとき?どのように私は私のアプリは、要求の途中で死亡した場合、私は長い間実行中のタスクを完了し、ウィジェットに戻って来ることができることを保証しますか。

役に立ちましたか?

解決

  

更新が発射されたコードが実行されます   ネットワーク呼び出しを行うAsyncTaskます。

これはBroadcastReceiverの内部にある場合は、

、それは動作しません。あなたがBroadcastReceiver、およびAsyncTaskから安全にフォークのスレッドが効果的に非同期的にそのタスクを実行するためにスレッドをフォークすることはできません。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top