114

AndroidのUIスレッドでタスクを実行するのrunOnUiThread()と使用するのとの間に違いがあるかどうか、誰か教えてもらえますか??Looper.getMainLooper().post()

私が判断できる唯一のことは、runOnUiThread は非静的 Activity メソッドでLooper.getMainLooper().post()あるため、Activity を表示できないクラス (インターフェイスなど) で何かをコーディングする必要がある場合により便利であるということです。

UIスレッドで何かを実行する必要があるかどうかについての議論を探しているわけではありません.実行できないものもあれば、実行すべきでないものもたくさんあります. UI スレッドから。

4

1 に答える 1

208

以下は、バックグラウンド スレッドから呼び出された場合と同じように動作します。

  • 使用してLooper.getMainLooper()

    Runnable task = getTask();
    new Handler(Looper.getMainLooper()).post(task);
    
  • 使用してActivity#runOnUiThread()

    Runnable task = getTask();
    runOnUiThread(task);
    

唯一の違いは、UI スレッドからそれを行う場合です。

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

現在のスレッドが既に UI スレッドであるかどうかを確認し、それを直接実行します。メッセージとして投稿すると、現在の UI スレッド メソッドから戻るまで実行が遅延します。

RunnableUI スレッドでを実行する 3 番目の方法もあります。これView#post(Runnable)は、UI スレッドから呼び出された場合でも、常にメッセージを送信します。Viewこれは、コードが実行される前に が適切に構築され、レイアウトがあることを保証するので便利です。

于 2012-12-20T15:00:51.807 に答える