我们知道main(UI)Thread正在使用隐式Looper附加它,以便它具有MessageQueue。
我们也知道我们可以在Looper.prepare()的帮助下将MessageQueue附加到工作线程
我的问题是,这两个队列是否相同?
答案 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是一个相关的讨论。