2017-02-21 6 views
0

AppCompatActivity에서는 이에 대한 피드백을 얻고 싶습니다. 이 Runnable은 언제 실행됩니까?UI 스레드와 관련하여이 작업은 어떻게 수행합니까?

메인 ui 스레드에 super.onBackPressed();이 게시되어 있고 내 Runnable도 메인 ui 스레드에 게시되어 있습니까? 내가 알고있는 바로 큐입니다. 이 올바른지?

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

.. –

+0

그것은이다 않는 UI 스레드 자체에서 UI 스레드에 Runnable을 게시입니다 쓰레기가 아니라 팡. UI의 모든 항목에 액세스하려면 UI에서 그런 항목을 실행해야합니다. 그러나 이전에 UI 스레드에서 onBackPressed가 호출 되었기 때문에 UI 스레드에서 이미 말했듯이 –

답변

0

onBackPressed() 항상 UI thread에 호출됩니다 . 여기 runOnUiThread() 방법은 불필요합니다. 코드가 무엇을

내부적으로 runOnUiThread()은 아래의 조치가

가 onBackPressed 코드는 항상 UI 스레드에서 실행됩니다
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'에있는 현재 Fragment를 얻으려면 runOnUiThread' 내부에'FragManager.findFragmentById (R.id.frame);'를 호출해야합니다. –

+0

'onBackPressed()'는'UI thread'의'Activity'에서만 호출되므로'runOnUiThread()'없이 코드를 실행할 수 있습니다. – arjun