Android -Handler-
Handlerとは
Androidでは、画面(UI)の書き換えは、スレッドによって行います。
しかし、画面(UI)は全てシングルスレッドの為、UI更新などを行うスレッドは 1つです。
Handlerは、描画処理をするスレッドをメインのスレッド処理として実行させます。
(シングルスレッドとしての処理とすると言うことです。)
描画処理を、メイン以外(別のスレッド)からの処理はエラーとなります。
AndroidのViewへの更新は、ほとんどの場合Handlerを経由してリクエストされなければ ならないため、Handlerクラスを継承することで、定期的な処理の実行が可能となります。
定期処理ハンドラを実行する方法
- Handler#sendMessageDelayedを使用して、一定間隔ごとにMessageを発行し、handlerMessage を受け取る方法
- Handler#postDelayedメソッドを使用して、一定間隔ごとにRunnableを起動させる方法
などがあります。
定期処理ハンドラの作成(Handler#sendMessageDelayedを使用)
- HnadlerMessageメソッドを記述(メッセージを受信することで起動します。)
- invalidateメソッドで再描画を行います。
- sleepメソッドの呼び出しをします。
handlerMessageを起動するためにHandleMessageメソッドに対して、定期的にメッセージを送る必要があるからです。
- 呼び出されるsleepメソッドの記述
- removeMessageメソッドで使用済みメッセージを削除します
- sendMessageDelayedメソッドで新しいメッセージを取得して指定時間後にメッセージを送ります。
- ViewクラスのonDrawメソッドに描画処理を記述します。
- 定期ハンドラの開始と停止の記述
- 開始(ActivityクラスのonResumeメソッド等に記述します。)
-
- Handlerクラスを継承したクラスのオブジェクトを取得します。
- sleepメソッドを呼び出し、開始します。
- 終了(AcivityクラスのonPauseメソッド等に記述します。)
-
- Hnadlerクラスを記述したクラスのオブジェクトにnullを代入します。