UIThread は、アプリケーションの実行のメイン スレッドです。これは、ほとんどのアプリケーション コードが実行される場所です。すべてのアプリケーション コンポーネント (Activities、Service、ContentProviders、BroadcastReceivers) はこのスレッドで作成され、これらのコンポーネントへのシステム コールはすべてこのスレッドで実行されます。
たとえば、アプリケーションが単一の Activity クラスであるとします。次に、すべてのライフサイクル メソッドとほとんどのイベント処理コードがこの UIThread で実行されます。これらは 、 、 、 などのメソッドですonCreate
。onPause
さらにonDestroy
、onClick
ここで UI のすべての更新が行われます。UI が更新または変更される原因はすべて、UI スレッドで発生する必要があります。
アプリケーションのプロセスとスレッドの詳細については、ここをクリックしてください。
バックグラウンドで作業を行うために新しいスレッドを明示的に生成すると、このコードは UIThread で実行されません。では、このバックグラウンド スレッドが UI を変更する何かを行う必要がある場合はどうなるでしょうか? これがrunOnUiThread
目的です。実際には、Handler を使用することになっています (詳細については、以下のリンクを参照してください)。これらのバックグラウンド スレッドに、UI を変更できるコードを実行する機能を提供します。これを行うには、UI を変更するコードを Runnable オブジェクトに配置し、それを runOnUiThread メソッドに渡します。
ワーカー スレッドの生成とそこからの UI の更新の詳細については、ここをクリックしてください。
個人的runOnUiThread
には、インストルメンテーション テストでのみこの方法を使用しています。テスト コードは UIThread では実行されないため、このメソッドを使用して UI を変更するコードを実行する必要があります。そのため、これを使用してクリック イベントとキー イベントをアプリケーションに挿入します。その後、アプリケーションの状態をチェックして、正しいことが起こっていることを確認できます。
UIThread でのコードのテストと実行の詳細については、ここをクリックしてください。