-7

私はrunOnUiThreadHandlersの両方に遭遇しましたが、私にとっては、それはまだ正確にどの事実が異なるのか疑問であるようです。HandlerとrunOnUiThreadの違いは何ですか?

UIを更新するにはどうすればよいでしょうか? runOnUiThreadまたはHandlerを使用する必要がありますか?

すでに完了しましたlink。まだ違いを正当化することはできません。

ありがとうございました

答えて

3

runOnUiThreadは、メインUIハンドラを使用するメソッドなので、基本的に同じです。唯一の違いは、あなたがuiハンドラの中でそれを呼び出すと、それをポストするのではなく実行するということです。

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

ハンドラはイベントキューを実装するのに便利です。メインスレッドで実行する必要はなく、独自のルーパーを設定することもできます。 RunOnUiThreadは基本的にはショートカットなので、実際にはハンドラを起動しないなどです。

+0

私はこれ以外のことを知っています。 –

+0

「それ以外」はどういう意味ですか?ハンドラを使用する必要がある場合は、ハンドラごとにメモリを割り当てる必要があります。また、あなたがすでにあなたのUIハンドラで作業しているかどうかを制御する必要があります。メソッド自体はあなたのためにそれを行います。 –

1

ハンドラが宣言されている自身を登録します。ルーパを手動で設定することもできます。

ハンドラは、複数回のデータをメインスレッドに投稿したい場合に特に便利です。

runOnUiThreadはアクティビティの方法です。 UIスレッドを更新する必要があるときは、次のようにコードを記述する必要があります。

 runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        // update the ui 

       } 
      }); 

再利用性はありません。

たとえば、ダウンロードしているファイルのステータスを更新したいとします。上記のメソッドを複数回記述する必要があります。

ハンドラオブジェクトを使用すると、同じハンドラオブジェクトを使用してUIが複数回更新されます。

関連する問題