Handlerについて
目次へ Handlerとは Androidでは、ユーザがアプリを起動すると、UIスレッド(メインスレッド)が作成され、 ユーザがタップするなどのイベントが発生すると、メッセージキューにそのイベントが並び、順番に実行されていきます。 そのため、UIスレッド上で実行する処理が非常に長いと、メッセージキューの次に並んでいる処理が実行できなくなるため、 UIスレッドでは、長い処理を行ってはいけないことになっており、通信などの長い時間のかかる処理は 別のスレッドを作成してその中で実行することになります。 しかし、画面の操作などは、UIスレッドでしか実行することができません。 UIスレッド以外のスレッドで、UIオブジェクトを参照したり変更したりするとクラッシュ、その他の不正動作が発生する可能性があります。 そのため、別スレッドからその結果を、画面に表示するなどの場合に使うのが、HandlerあるいはAsyncTaskです。 同じことができますが、ここではHandlerを説明しますので。AsyncTaskについては こちら をご覧ください。 Handlerはどのように動作するのか GUIのアプリケーションでは、メッセージキューにたまっている処理を順番に実行していくループがあります。 Androidでも同じで、スレッドごとにメッセージキューを持ち、Looperというクラスのloopメソッドが、 呼び出されたスレッド上で、キューの内容を実行します。 Looperオブジェクトはスレッドに関連付けられており、関連付けられたスレッド上のメッセージループを実行します。 Handlerはどのように動作するのかというとHandlerのコンストラクタで、Looperオブジェクトから そのLooperオブジェクトが関連付いているスレッドのメッセージキューを取得し、それに対してメッセージを送ります。 HandlerのインスタンスはUIスレッド上で作成する必要があります。そうすることにより、 UIスレッドに関連付いたLooperオブジェクトを使うことができ、UIスレッド上でメッセージキューの内容を実行することができます。 つまり、Han...