違いはありますか
new Handler.post(Runnable r);
そして
activity.runOnUiThread(Runnable r)
runOnUiThread
は基本的に、AsyncTask
を呼び出す前に、進行状況ダイアログを表示したり、UI操作を行ったりするのに適しています。スレッド実行の途中でUIを更新したい場合は、UIを更新するHandler
を作成し、スレッドを実行し続けること(テキストビューを定期的に更新するなど)が最善の方法です。数秒後、タイマー機能と言います。
公式 Handler docsから
ハンドラ
ハンドラーの主な用途は2つあります。
(1)メッセージと実行可能ファイルを将来のある時点で実行されるようにスケジュールする。
(2)自分のスレッドとは異なるスレッドで実行されるアクションをエンキューする。
要するに、ハンドラーは異なるRunnableを管理するために使用されます。
runOnUiThread
これは、UIスレッドで非UI操作を実行するために使用されます。たとえば、AsyncTaskのdoInBackground()から画面を更新する場合は、runOnUiThread()内のUIを更新するコードの一部を記述する必要があります。しかし、これはUIをブロックします。
Handler
が作成されたスレッドにアタッチされます。
handler.post(Runnable)
を使用して、ハンドラーが接続されているスレッドでコードを実行できます。
Activity.runOnUIThread(Runnable)
は常に、アクティビティのUIThreadで指定されたランナブルを実行します。内部的には、次のように構築されたときにActivityが作成するハンドラーを介して行います。
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スレッド上にある場合、それは単にランナブルを呼び出します。
コードをRad here にします。