主线程消息循环机制本质
2016-09-01 17:26
183 查看
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消息通信机制(主线程发消息到子线程)
- Android 消息循环机制源码分析
- Android 消息循环机制源码分析
- Android HandlerThread 消息循环机制之源码解析
- 090927(星期天):MFC消息处理机制,Dlg程序的消息循环
- 消息循环机制
- Toast和Looper。Handler消息循环机制
- SDK消息循环机制
- OC关键字@property、@synthesize和id类型、构造方法、分类categary、类的本质、description方法、SEL消息机制
- Android消息循环机制
- Android 消息循环机制源码分析
- MFC消息处理机制,Dlg程序的消息循环
- 利用WINDOWS的消息机制进行截断视频的循环显示
- Qt事件机制浅析(定义,产生,异步事件循环,转发,与信号的区别。感觉QT事件与Delphi的事件一致,而信号则与Windows消息一致)
- Andorid中的消息循环机制(一)
- 【Android 开发】: Android 消息处理机制之四: Android 消息循环 Looper 及其源码解析
- Toast和Looper。Handler消息循环机制。
- Android 消息循环机制之ThreadLocal 类详解
- Android主线程中的消息处理机制
- Android的消息循环机制 Looper Handler类分析