89

誰かがUIスレッドが正確に何であるかを説明できますか? developer.android.com では、 runOnUiThread 関数について述べています

public final void runOnUiThread (実行可能なアクション)

導入されたバージョン: API レベル 1 UI スレッドで指定されたアクションを実行します。現在のスレッドが UI スレッドの場合、アクションはすぐに実行されます。現在のスレッドが UI スレッドでない場合、アクションは UI スレッドのイベント キューにポストされます。

UIスレッドは、着信コールや画面の調光などのUIアクティビティによってアクティビティがバックグラウンドにプッシュされるたびにこれが実行されることを意味しますか? そうでない場合、UI スレッドには正確に何が含まれていますか?

ありがとうございました

4

3 に答える 3

149

UIThread は、アプリケーションの実行のメイン スレッドです。これは、ほとんどのアプリケーション コードが実行される場所です。すべてのアプリケーション コンポーネント (Activities、Service、ContentProviders、BroadcastReceivers) はこのスレッドで作成され、これらのコンポーネントへのシステム コールはすべてこのスレッドで実行されます。

たとえば、アプリケーションが単一の Activity クラスであるとします。次に、すべてのライフサイクル メソッドとほとんどのイベント処理コードがこの UIThread で実行されます。これらは 、 、 、 などのメソッドですonCreateonPauseさらにonDestroyonClickここで UI のすべての更新が行われます。UI が更新または変更される原因はすべて、UI スレッドで発生する必要があります。

アプリケーションのプロセスとスレッドの詳細については、ここをクリックしてください。

バックグラウンドで作業を行うために新しいスレッドを明示的に生成すると、このコードは UIThread で実行されません。では、このバックグラウンド スレッドが UI を変更する何かを行う必要がある場合はどうなるでしょうか? これがrunOnUiThread目的です。実際には、Handler を使用することになっています (詳細については、以下のリンクを参照してください)。これらのバックグラウンド スレッドに、UI を変更できるコードを実行する機能を提供します。これを行うには、UI を変更するコードを Runnable オブジェクトに配置し、それを runOnUiThread メソッドに渡します。

ワーカー スレッドの生成とそこからの UI の更新の詳細については、ここをクリックしてください。

個人的runOnUiThreadには、インストルメンテーション テストでのみこの方法を使用しています。テスト コードは UIThread では実行されないため、このメソッドを使用して UI を変更するコードを実行する必要があります。そのため、これを使用してクリック イベントとキー イベントをアプリケーションに挿入します。その後、アプリケーションの状態をチェックして、正しいことが起こっていることを確認できます。

UIThread でのコードのテストと実行の詳細については、ここをクリックしてください。

于 2010-09-06T18:13:29.893 に答える
10

別のスレッドでブロッキング コード (Http-Request など) を実行する場合は、AsyncTaskの使用を検討してください。そのdoInBackground-Method は別のスレッドで実行されます。は、UI スレッドでの実行が保証されているAsyncTaskメソッドonProgressUpdateを提供します。onPostExecute

GUI 進行状況の更新が必要な場合 (たとえば、進行状況バーを介して)、publishProgress内部で呼び出しますdoInBackgroundこれは、UI スレッドで実行されることが保証されてonPublishProgressいるの後続の呼び出しにつながります。

onPostExecuteリターン後に自動的に呼び出されdoInBackgroundます。

于 2014-02-05T13:57:23.520 に答える
5

すべての UI 描画などは別のスレッドで行われます。その UIThread と呼ばれます。UI に変更を加えたい場合は、UIThread のコンテキストで変更が行われるようにする必要があります。それを行う最も簡単な方法は、runOnUiThread

于 2010-09-06T15:48:25.450 に答える