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