[解決済み] Android UiThread(UIスレッド)とは?
質問
UIスレッドとは一体何なのか、どなたか教えてください。 developer.android.com には、runOnUiThread 関数について書かれています。
public final void runOnUiThread (Runnable アクション)
Since: API Level 1 UIスレッドで指定されたアクションを実行します。もし 現在のスレッドがUIスレッドである場合、アクションは直ちに実行されます。 すぐに実行されます。現在のスレッドがUIスレッドでない場合、アクションはUIスレッドのイベントキューに投稿されます。 UIスレッドのイベントキューに投稿されます。
UIスレッドとは、着信や画面の暗転などのuiアクティビティによってアクティビティがバックグラウンドにプッシュされるたびに実行されることを意味するのでしょうか?そうでない場合、UI スレッドは正確に何を含んでいますか?
ありがとうございます。
どのように解決するのですか?
UIThreadは、アプリケーションの実行のメインスレッドです。ここで、アプリケーション コードのほとんどが実行されます。すべてのアプリケーション コンポーネント (アクティビティ、サービス、ContentProviders、BroadcastReceivers) はこのスレッドで作成され、これらのコンポーネントへのシステム コールはすべてこのスレッドで実行されます。
たとえば、アプリケーションが単一のActivityクラスであるとします。すると、すべてのライフサイクル メソッドとイベント処理コードのほとんどがこの UIThread で実行されます。これらは以下のようなメソッドです。
onCreate
,
onPause
,
onDestroy
,
onClick
などです。さらに、UIに対するすべての更新がここで行われます。UI を更新または変更する原因となるものはすべて、UI スレッドで起こらなければなりません。
アプリケーションのプロセスとスレッドの詳細については、ここをクリックしてください。
バックグラウンドで作業をするために新しいスレッドを明示的に生成したとき、このコードは UIThread 上では実行されません。では、このバックグラウンド スレッドが UI を変更するようなことを行う必要がある場合はどうなるでしょうか。これは
runOnUiThread
はそのためのものです。実際にはハンドラ(これについては下のリンクを参照してください)を使用することになっています。これはバックグラウンドスレッドにUIを変更するコードを実行する機能を提供します。これは、UI を変更するコードを Runnable オブジェクトに入れ、それを runOnUiThread メソッドに渡すことによって行われます。
ワーカスレッドを生成し、そこから UI を更新する方法についての詳細は、ここをクリックしてください。
私は個人的には
runOnUiThread
メソッドを使用しています。テストコードは UIThread 内で実行されないので、UI を変更するコードを実行するためにこのメソッドを使用する必要があります。そこで、私はこのメソッドを使用して、アプリケーションにクリックイベントとキーイベントを注入します。そして、アプリケーションの状態をチェックして、正しいことが起こったことを確認することができます。
関連
-
[解決済み】Looper.prepare()を呼び出していないスレッド内でハンドラを作成できない。)
-
[解決済み] Androidのgravityとlayout_gravityの違いは何ですか?
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み】「px」、「dip」、「dp」、「sp」の違いは?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] TabLayoutに対応したandroidデザインでタブテキストのフォントを変更する
-
[解決済み] キャンバスに複数行のテキストを描画する
-
[解決済み] ブルートゥースアプリケーションのテストにアンドロイドエミュレータを使用するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] AsyncTaskのAndroidサンプル
-
[解決済み] BottomSheetDialogFragmentの状態をexpandedに設定する。
-
[解決済み] ArrayAdapter<myClass> の使用方法
-
[解決済み] プログラム的に電話をかけるには?
-
[解決済み] HttpPostによる画像送信
-
[解決済み] 文字サイズとアンドロイドの画面サイズの違い
-
[解決済み] APKが署名済みかデバッグビルドかを確認するには?
-
[解決済み] AndroidでTextViewの下にアンダーラインを引くには
-
[解決済み] edittextのテキストがメールアドレスかどうかを確認するには?
-
[解決済み] LayoutParamsの高さを密度に依存しないピクセル数でプログラム的に設定する。