2017-02-21 101 views
0

在AppCompatActivity中只是想獲得一些反饋意見。這個Runnable何時運行?關於UI線程的這個工作是如何進行的

super.onBackPressed();是在主UI線程上發佈的,然後我的Runnable也發佈到主UI線程?我知道這是一個排隊權。它是否正確?

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
      // some work 
      } 
     }); 
} 
+1

在onBackPressed代碼總是會在UI線程上運行.. –

+0

這是一個線程,而不是持久化。 如果你想訪問UI中的任何東西,就需要像這樣在UI上運行東西。然而,正如你之前所說,它已經在UI線程上,因爲onBackPressed是從UI線程調用的 –

回答

0

onBackPressed()總是會在UI thread調用。所以runOnUiThread()方法在這裏是不必要的。

你的代碼做什麼職位從UI線程本身的UI線程上Runnable

內部runOnUiThread()並以下動作

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

我的Q並不是那麼清楚,但我經歷過,如果我按下Fragment和'public void onBackPressed()'上的按鈕,我想要在'super.onBackPressed();'後面得到當前在'R.id.frame'中的當前片段'''我必須運行這個:'FragManager.findFragmentById(R.id.frame);''runOnUiThread'內部' –

+0

''onBackPressed()'只會在'UI線程'上的'Activity'上被調用,所以你可以在沒有'runOnUiThread()'的情況下運行你的代碼' – arjun