2014-12-30 3 views
0

메인 (UI) 스레드는 MessageQueue를 갖기 위해 스레드에 암시 적 루퍼가 첨부되어 있습니다.Android MessageQueue

그리고 우리는 또한 우리가 Looper.prepare()의 도움으로 작업자 스레드에 MessageQueue가 첨부 수 있다는 사실을 알고

내 질문은 그게은 동일 모두 대기열입니다?

+0

동일? 너 무슨 뜻이야? 그들의 참고 문헌을 비교 했습니까? – pskink

+0

@pskink 나는 hasCode()에 대해 걱정하지 않는다 ... 우리는 왜 우리가 MessageQueue를 가지고 있는지 안다 ... 파이프 라인에서 UI를 렌더링한다 ... 하나의 스레드 (UI 스레드)가이 작업을 수행 할 책임이있다. MessageQueue를 갖는 하나 이상의 스레드를 가지고 있다면 렌더링을위한 파이프 라인 개념은 무엇인지 ... 내 관심사는 모두 동일해야합니다. –

+0

죄송합니다. 전혀 이해하지 못하겠습니까? – pskink

답변

1

새 스레드에서 Looper.loop()을 호출하면 MessageQueue이 아니므로 새로운 MessageQueue이 새로 만든 스레드에 연결됩니다. 그런 다음 우리는 보통 스레드와 통신하기 위해 Handler을 사용합니다. 메인 UI 스레드의 MessageQueue은 앱 시작시 시스템에 의해 생성됩니다. 참조를 통해 메시지 대기열을 비교할 수 있습니다.

private static final String TAG = MainActivity.class.getSimpleName(); 
private Handler mHandler; 
private MessageQueue messageQueue; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    messageQueue = Looper.myQueue(); 
    new Thread() { 

     @Override 
     public void run() { 
      super.run(); 
      Looper.prepare(); 
      mHandler = new Handler() { 
       @Override 
       public void handleMessage(Message msg) { 
        super.handleMessage(msg); 
        if (Looper.myQueue().equals(messageQueue)) { 
         Log.d(TAG, "same message queue"); 
        } else { 
         Log.d(TAG, "not the same queue"); 
        } 
       } 
      }; 
      mHandler.sendEmptyMessage(0); 
      Looper.loop(); 
     } 
    }.start(); 
} 

Here과 관련된 토론입니다.

+0

감사합니다 @alijandro –