Android MessageQueue

时间:2014-12-30 11:21:51

标签: android message-queue

我们知道main(UI)Thread正在使用隐式Looper附加它,以便它具有MessageQueue。

我们也知道我们可以在Looper.prepare()的帮助下将MessageQueue附加到工作线程

我的问题是,这两个队列是否相同?

1 个答案:

答案 0 :(得分:1)

它与MessageQueue不一样,当您在新线程中调用Looper.loop()时,新的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是一个相关的讨论。