主线程消息循环机制本质

1.主线程消息循环:ActivityThread主线程的入口方法:main
	main() {
		Looper.prepareMainLooper(); // 创建Looper,并添加到线程中
		Looper.loop(); // 死循环查询,取出Message,执行Message绑定的Handler的handleMessage
	}

	Looper.prepareMainLooper-->
		// Looper.java
		public static final void prepareMainLooper() {
	        prepare(); // 创建一个Looper并加入到线程局部变量中:sThreadLocal.set(new Looper());
	        setMainLooper(myLooper()); // 将prepare创建的Looper对象取出,并保存到变量mMainLooper = looper;
	    }

	// E
	Looper.loop();-->
		// Looper.java
	    public static final void loop() {
	        Looper me = myLooper(); // 获取当前线程对应的Looper,也就是prepare保存进去的looper
	        MessageQueue queue = me.mQueue;
	        while (true) {
	            Message msg = queue.next(); // might block.如果消息队列为空则休眠,有数据插入到消息队列则唤醒
	          
	            if (msg != null) {
	                if (msg.target == null) {
	                    // No target is a magic identifier for the quit message.
	                    return;
	                }
	                
	                msg.target.dispatchMessage(msg); // 调用Message.handleMessage	             
	                msg.recycle();
	            }
	        }
	    }


小结:
	1.涉及到类
		Looper:引用MessageQueue
		MessageQueue:引用多个Message.本质是一个队列,按照未来即将超时时间来排序队列中的每个元素
			Message
		Handler:把Message插入到MessageQueue中
	    
	2.E.Looper.loop是引擎,本质是一个死循环,不断查询MessageQueue中是否有Message,如果有超时的Message,则取出来调用Message绑定的Handler的
		handlerMessage函数



你可能感兴趣的:(Android源码解析)