35

違いはありますか

new Handler.post(Runnable r);

activity.runOnUiThread(Runnable r)
4

3 に答える 3

19

公式ハンドラードキュメントから

ハンドラ

ハンドラーの主な用途は2つあります。

(1)将来のある時点で実行されるメッセージとランナブルをスケジュールするため。

(2)自分のスレッドとは異なるスレッドで実行されるアクションをキューに入れること。

つまり、HandlerはさまざまなRunnableを管理するために使用されます。

runOnUiThread

これは、UIスレッドで非UI操作を実行するために使用されます。たとえば、AsyncTaskのdoInBackground()から画面を更新する場合は、runOnUiThread()内にUIを更新するコードの一部を記述する必要があります。しかし、これもUIをブロックします。

于 2011-09-17T06:21:47.903 に答える
7

runOnUiThread基本的に、進行状況ダイアログを表示したり、AsyncTask呼び出しの前にUI操作を行ったりするのに適しています。スレッドの実行中にUIを更新する場合は、UIを更新するを作成し、Handlerスレッドの実行を継続することをお勧めします。たとえば、数秒後に定期的にテキストビューを更新します。タイマー機能。

于 2011-09-17T07:15:17.740 に答える
1

Handler作成されたスレッドにAが付加されます。

handler.post(Runnable)ハンドラーが接続されているスレッドでコードを実行するために使用できます。

Activity.runOnUIThread(Runnable)常にアクティビティのUIThreadで指定されたランナブルを実行します。内部的には、次のように構築されたときにアクティビティが作成するハンドラーを介してこれを行います。

final Handler mHandler = new Handler();

したがって、runonUiThradコードは次のようになります。

public final void More ...runOnUiThread(Runnable action) {
    if (Thread.currentThread() != mUiThread) {
        mHandler.post(action);
    } else {
        action.run();
    }
}

現在のスレッドがUIスレッドではないかどうかを確認できるように、指定されたランナブルを、前に参照したメンバーハンドラーに投稿します。呼び出し元がすでにUIスレッドにいる場合は、ランナブルを呼び出すだけです。

ここでコードをラッドします。

于 2017-12-18T10:32:19.333 に答える