最終更新:2016-09-23 (金) 14:59:32 (2763d)  

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

ドキュメント

関連するクラス

メインスレッド (Android/UIスレッド)

  • すべての処理はメインスレッド(UIスレッドとも呼ばれる)で行われる。
    • イベントのディスパッチ
    • 描画処理

注意点

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

開放

  • //スレッドを削除
    mLooper = null;
  • null代入されて参照を失ったスレッド資源はAndroidのメモリ管理システムによって回収されます

Android/メッセージキュー

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

クラス

  • android.os.Looper
    • メインスレッドを監視し、 自身が持っているメッセージキューからメッセージを取り出して処理を実行
  • android.os.Handler
    • メッセージキューにメッセージを入れる為のもの

ルール

  • Andoid UI toolkit is not thread-safe.
    • So, you must not manipulate your UI from a worker thread

Do not block the UI thread

Do not access the Android UI toolkit from outside the UI thread

メモ

UIスレッド外からのUIの操作

  • たとえばtextView.setText(hoge);
  • android.view.ViewRootImpl$CalledFromWrongThreadException?: Only the original thread that created a view hierarchy can touch its views.

Android NDK (JNI/スレッド)

  • ネイティブ上でpthread_create関数を使ってスレッドを生成した場合、JNIではAttachCurrentThread関数、もしくはAttachCurrentThreadAsDaemon?関数でVMに関連付けする

AOSP/スレッド

参考