最終更新:2018-02-16 (金) 17:20:38 (2233d)
Android/UIスレッド
Communicating with the UI Thread
- To move data from a background thread to the UI thread, use a Handler that's running on the UI thread.
- https://developer.android.com/training/multiple-threads/communicate-ui.html
Android/メインスレッド?
- すべての処理はメインスレッド(UIスレッドとも呼ばれる)で行われる。
- イベントの-ディスパッチ
- 描画処理 - UIの表示や更新はメインスレッドからしかできない
- onCreateとかonPauseなどのアクティビティのライフサイクル
注意点
- ブロック中はイベントもディスパッチされない
- 5秒ブロックされるとANR
- ブロックされる原因
- ネットワークアクセス
- データベースへのクエリ
Android/メッセージキュー
- スレッドにはメッセージキューが関連付けされており、UIスレッドではそのメッセージキューから処理を取り出して一つ一つ処理をすることによって、イベント処理を行ったり、 GUI コンポーネントの描画を行うなどしている
android.os.Handler
- 他のスレッドからメインスレッドに処理を依頼する窓口になる仕組み
- ハンドラーに処理を依頼すると、メインスレッドは適切なタイミングでその処理を実行します。
android.os.AsyncTask
android.os.Looper
- mHandler = new Handler(Looper.getMainLooper())
メモ
public class AppUtil { static final Handler gUiHandler = new Handler(Looper.getMainLooper()); public static void postUiThread(Runnable runnable) { gUiHandler.post(runnable); } }