AlarmManager 2 定期的な間隔で繰り返し処理をするプログラム
先日のエントリーで、AlarmManager#setを使った処理を記述しました。
setは、何月何日何時何分に処理をするといった時に使用します。毎日0時1秒に処理をしたいのであれば、BroadcastReceiverで再度setにて指定する必要があります。
上記のような処理ではなく、一定の間隔で処理を行いたい時は、setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)を使用します。
このメソッドでは、繰り返しブロードキャストレシーバーにメッセージを送る事ができ、AlarmManager#cancelされるまで永遠に繰り返します。(RSSReaderやポッドキャストプログラムでFeedを取得する時などに使用しています)。
13分間隔でBroadcastReciverを呼び出すプログラム(送り側)
Intent intent = new Intent(ctx, ReceiverIconChange.class); intent.setAction(CALENDER_ICON_CHANGE); PendingIntent sender = PendingIntent.getBroadcast(ctx, 0, intent, 0) AlarmManager am = (AlarmManager)(ctx.getSystemService(ALARM_SERVICE)); long interval = 13 * 1000 * 60; long firstTime = SystemClock.elapsedRealtime(); am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,firstTime, interval, mFeedService);
上記コードでは、初回に起動される時間を現在としています。
受け取り側のレシーバーは、昨日のAlarmManager1の記事とほぼ同じですが、アラームを再設定する必要がない所が異なります。
Service受取側
public class ReceiverIconChange extends BroadcastReceiver { public void onReceive(Context ctx, Intent intent) {String action = intent.getAction();if (!CALENDER_ICON_CHANGE.equals(action)) {// アイコン変更の要求でなかったら、終了return;} doSomething();}
繰り返し処理をするといっても、ゲームとか、時計の秒針をきちんと実装するとかシビアな物には使えません。1秒程度ずれても問題ないような時に使用するのが良いでしょう。
ブログ内の関連する記事
- AlarmManager 1 Android でCronみたいなことをするには
- AlarmManager 2 定期的な感覚で繰り返し処理をするプログラム
- Android AlarmManager 3 サービスでの受け取り
- Android AlarmManager 4 アラームが消えるとき
- Android AlarmManager 5 システムブロードキャスト
コメント
コメントを投稿