Androidのイベント処理 - Handler
パフォーマンス面の考慮でAndroidのUI操作はスレッドセーフではない。
これによって複数のスレッドでUI操作が行われるとスレッドセーフの問題が発生する。
これを解決するためにAndroidは一つのルールを決めてある。
「UIスレッドのみActivity内のUIを変更できる」
アプリが初めて起動される時、Androidはメインスレッドを起動する。
メインスレッドは主にUI関連の処理を行う(クリックイベント、タッチイベントなど)、
なのでメインスレッドをUIスレッドと呼ぶことが多いらしい。
でも、実際アプリでは複数のスレッドでUIを変更する必要があるのだ。
これを解決するための仕組みが「Handler」である。
Handlerクラスの役割
① サブスレッドでメッセージを送る
② UIスレッド(Main thread)でメッセージ取得&処理
Handlerクラスのメソッド
void handleMessage(Message msg)
- メッセージを処理。通常オーバライドされる。
final boolean hasMessage(int what)
- MessageQueueにwhat属性のメッセージがあるのか
final boolean hasMessage(int waht, Object object)
- MessageQueueにwhat属性のobjectメッセージがあるのか
Message obtainMessage() - Message取得
sendEmptyMessage(int what) - 空メッセージを送る
final boolean sendEmptyMessageDelayed(int what, long delayMillis)
- Xミリ秒後空メッセージを送る
final boolean sendMessage(Message msg) - 即時メッセージを送る
final boolean sendMessageDelayed(Message msg, long delayMillis)
- Xミリ秒後メッセージを送る
下記サンプルコードでは自動で画像切り替える。
MainActivity.java |
package com.example.liguofeng.firsthandler; |