[android] Rxjava で 簡単なタイマーを作ってみた。

これまではAndroidでタイマー機能を実装するのに、HandlerRunnableを使ってやっていたかと思います。

僕は使ったことはないですが、java.util.Timerjava.util.TimerTaskを使ってやる方法もあるようです。

タイマーやストップウォッチはchronometerを使えば簡単にできますが、自由度があまりありません。カウントアップ専用のTimerTaskを使えば100msec刻みのタイマーが作れます。

と思ったら、やったらだめ!と主張してるサイトもあるようですね。

さて、本題ですが、今はRxという便利なライブラリがあるので、バックグラウンドの処理はこれに置き換えてしまいましょう。
下記がソースコードです。

今回のRxはVer1.xです。2.xでもそのまま使えると思いますがちょっとまだ試せていません。

解説ですが、

  1. Observableのintervalオペレーターで、毎秒メッセージを発信するストリームを作成する。
  2. take オペレーターで、ストリームを先頭から指定した件数までに指定する。ここでは 30
  3. map オペレーターで、発信する値を編集する。内容はTIMER_DURATION - aLongで、aLongは呼ばれるたびにTIMER_DURATION まで増えるので、結果的に1ずつ減ったLongが送信される。
  4. subscribeでタイマー処理を起動する。
  5. onNext にて、毎秒の処理を記載する。ここでログを出するとカウンターが減っていく様子が確認できる。
  6. onCompleted にて、タイマー終了後の処理を記載する。タイマー処理後の処理はここで書くと良い。

以上です。

スポンサーリンク
レクタングル(大)