2011年2月19日土曜日

android Handler による timer 機構

 本日は、Handler の timer 絡みのコードを深堀りしました。

Handler.postAtTime は、Handler.sendMessageAtTime をコールしています。
そして、Handler.sendMessageAtTime は、MessageQueue.enqueueMessage をコールしています。

ここでのトリックは、MessageQueue が、現在取得できる機器の稼働時間 SystemClock.uptimeMillis() と、引数で指定された稼働時間を比較して、指定された稼働時間を過ぎていた場合には、Handler を取り出して実行するというものです。稼働時間が過ぎていない場合には、MessageQueue が queue に溜まっている次の Handler を処理します。
postDelayed の場合は、現在取得できる機器の稼働時間に指定された millisec を足して、sendMessageAtTime しています。

なるほど、これはスマートなやり方だ。ちなみに、だからといって一度に大量の Handler を postDelayed で投入するのは、賢いやり方とは言えない。

機器の稼働時間がオーバーフローする事は無いのかな・・・

0 件のコメント: