最終更新:2018-02-16 (金) 17:20:38 (2254d)  

Android/UIスレッド
Top / Android / UIスレッド

Communicating with the UI Thread

Android/メインスレッド?

  • すべての処理はメインスレッド(UIスレッドとも呼ばれる)で行われる。
    • イベントの-ディスパッチ
    • 描画処理 - UIの表示や更新はメインスレッドからしかできない
    • onCreateとかonPauseなどのアクティビティのライフサイクル

注意点

  • ブロック中はイベントもディスパッチされない
  • 5秒ブロックされるとANR
  • ブロックされる原因
    • ネットワークアクセス
    • データベースへのクエリ

Android/メッセージキュー

  • スレッドにはメッセージキューが関連付けされており、UIスレッドではそのメッセージキューから処理を取り出して一つ一つ処理をすることによって、イベント処理を行ったり、 GUI コンポーネントの描画を行うなどしている

android.os.Handler

  • 他のスレッドからメインスレッドに処理を依頼する窓口になる仕組み
  • ハンドラーに処理を依頼すると、メインスレッドは適切なタイミングでその処理を実行します。

android.os.AsyncTask

android.os.Looper

メモ

  • public class AppUtil {
        static final Handler gUiHandler = new Handler(Looper.getMainLooper());
    
        public static void postUiThread(Runnable runnable) {
            gUiHandler.post(runnable);
        }
    }