Androidハンドラ非同期メッセージしくみ
AndroidのHandlerはメッセージメカニズムに基づく非同期処理機構で、メッセージやRunnableオブジェクトをメインスレッドやバックグラウンドスレッドに送信して実行できます。
Androidでは、UI操作は必ずメインスレッドで行わないと異常が発生します。バックグラウンドスレッドで時間のかかる処理を実行する場合は、Handlerを使用して結果をメインスレッドへ送信し、UIを更新する必要があります。
ハンドラーはMessageとMessageQueueの2つの概念を中心に構成されています。
メッセージ(Message)は、Handlerとスレッド間のデータの受け渡し手段で、実行する操作とそのパラメータが含まれます。Handlerはメッセージを送信すると、メッセージキューにメッセージを格納します。
MessageQueueは、メッセージを格納するFIFOキューです。メッセージの格納と取得を管理します。MessageQueueに新しいメッセージがある場合、HandlerはMessageQueueからメッセージを取り出し、メッセージ内のパラメーターに基づいて関連操作を実行します。
ハンドラがメッセージを取得したら、UIインターフェイスの更新、時間のかかる処理の実行、メッセージの送信などいくつかの操作を実施できます。一定時間が経過した後に操作を実施する必要がある場合は、ハンドラのpostDelayed()メソッドを使用できます。
ざっくり言うと、AndroidのHandlerはスレッド間通信の仕組みで、メッセージとメッセージキューを使って非同期処理を実現し、UIスレッドやバックグラウンドスレッドに処理を送信して実行できます。Handlerを使用すると、UI更新、遅延実行、非同期タスク処理などの機能を実装できます。