2017-02-21 25 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

相关问题