1. ホーム
  2. android

[解決済み] Android UiThread(UIスレッド)とは?

2023-04-01 18:42:58

質問

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 を変更するコードを実行するためにこのメソッドを使用する必要があります。そこで、私はこのメソッドを使用して、アプリケーションにクリックイベントとキーイベントを注入します。そして、アプリケーションの状態をチェックして、正しいことが起こったことを確認することができます。

UIThreadでのテストとコードの実行に関する詳細は、こちらをご覧ください。