違いはありますか
new Handler.post(Runnable r);
と
activity.runOnUiThread(Runnable r)
公式ハンドラードキュメントから
ハンドラ
ハンドラーの主な用途は2つあります。
(1)将来のある時点で実行されるメッセージとランナブルをスケジュールするため。
(2)自分のスレッドとは異なるスレッドで実行されるアクションをキューに入れること。
つまり、HandlerはさまざまなRunnableを管理するために使用されます。
runOnUiThread
これは、UIスレッドで非UI操作を実行するために使用されます。たとえば、AsyncTaskのdoInBackground()から画面を更新する場合は、runOnUiThread()内にUIを更新するコードの一部を記述する必要があります。しかし、これもUIをブロックします。
runOnUiThread
基本的に、進行状況ダイアログを表示したり、AsyncTask
呼び出しの前にUI操作を行ったりするのに適しています。スレッドの実行中にUIを更新する場合は、UIを更新するを作成し、Handler
スレッドの実行を継続することをお勧めします。たとえば、数秒後に定期的にテキストビューを更新します。タイマー機能。
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スレッドにいる場合は、ランナブルを呼び出すだけです。
ここでコードをラッドします。