2013年2月22日金曜日

[Android]HandlerとAlarmManagerってどっち使えばいいの

ふとHandler.postDelayed()とAlarmManagerの使い分けってどうなってるんだろうって思ったから調べた

まず基本的な使い方を調べる
・Handler
Handler.postDelayed()はこんな感じ
  new Handler().postDelayed(new Runnable() {
   @Override
   public void run() {
      hoge();
   }
  }, 1000);//1s delay
簡単だね

・AlarmManager
AlarmManagerはここら辺で紹介されてるね
AlarmManagerで指定した時間に処理させる
AlarmManager

メソッドはこんなのがある

set(int type, log triggerAtTime, PendingIntent operation)
ワンショットの人
setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)
繰り返す人
setInexactRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)
おおざっぱに繰り返す人

ざっくりと特徴をあげると、
・サスペンドしてたらレジュームしてくれるオプションがある
・triggerAtTimeはブートしてからの時間かUTCとか指定しないといけない


ということは・・・
AlarmManagerの使いどころはやっぱり定時処理が強い感じだね。
それこそ目覚まし時計的なところが使いどころなわけだ。
後は寝てたら起こしてくれる_WAKEUPオプションがあるんだから、そこらへんの人がおいしい目を見そうだね。

でも、数秒後になんかやるとか単純なものである限りpostDelayed()使ったほうが楽な気がする。
実装的に。
Y.A.M の 雑記帳さんところで書いてあった注意書きはそういうことかな。

---
20130226 追記
AndroidDevelopersにしっかり書いてあった
Note: The Alarm Manager is intended for cases where you want to have your application code run at a specific time, even if your application is not currently running. For normal timing operations (ticks, timeouts, etc) it is easier and much more efficient to use Handler.

0 件のコメント:

コメントを投稿