源码分析Handler机制
2017-05-03 16:02
211 查看
Handler机制
Message(消息)消息的创建:
调用Message.obtain()方法,当sPool消息池为空就创建消息对象
消息的next属性:
消息对象通过next属性指向下一个消息对象
消息的when属性:
long类型变量when,记录自己发送时间
消息的target成员变量:
消息对象中有一个Handler类型的成员变量target
这个target记录此消息对象是由哪个Handler创建的
多个Handler对象给消息队列发送消息,最终消息由谁处理,取决于消息由谁发送。(谁发送谁处理)
处理消息时调用Message.target.handleMessage();也就是Handler.handleMessage();
Handler(处理器)
Handler的创建:
应用启动时候,ActivityThread主线程会创建Handler和MessageQueue,并启动Handler
handler发送消息:
Handler.sendMessage();发送消息
Handler处理消息:
Handler.handleMessag();处理消息
Looper(轮循器)
Lopper何时开始轮循:
只有当主线程ActivityThread调用Looper.loop();才开始轮循
Looper.loop();是个while(true){}的死循环
Looper轮循的原理:
由于android的内核是Linux,所以也继承了Linux的进程间通信机制–“管道”
管道的原理:
在内存中有一个特殊的文件,这个文件有两个句柄(引用),一个是读取句柄,一个是写入句柄。
内存中会有一块共享空间和两个流,一个主线程的读操作,一个子线程的写操作
只有当子线程进行写操作时,主线程才会进行写操作
Looper的原理:
主线程Looper从消息队列读取消息,当读完所有消息时,进入睡眠,主线程阻塞。
子线程往消息队列发送消息,并且往管道文件写数据,主线程即被唤醒,从管道文件读取数据
主线程被唤醒只是为了读取消息,当消息读取完毕,再次睡眠
MessageQueue(消息队列)
消息队列的数据结构:
MessageQueue是个队列结构,但由于Message对象通过next指向下一个消息对象,所以又类似于单链表结构
消息入队:
MessageQueue.enquqeueMessage(Message msg,long when);将消息入队
MessageQueue处理消息的顺序由when决定,when越小越靠前
当(p == null || when==0 || when < p.when)将消息插入队首,优先处理
否则比较when参数确定消息所在位置
相关文章推荐
- Handler机制-从源码角度分析
- Android源码分析笔记--Handler机制
- handler机制(二)源码分析
- Handler机制源码分析(异步一)
- Android Handler机制源码分析
- handler机制 源码分析 梳理
- android源码分析系列(一):Handler机制
- 从源码角度分析java层Handler机制
- Android Handler机制(一)---Message源码分析
- Handler机制流程梳理、源码分析
- Handler机制的源码分析
- 源码分析 — Handler机制(线程间通信)
- [置顶] Android源码分析——Looper,Messagequeue,Message,handler初始化及handler机制简介
- 通过源码分析Android Handler机制
- Android源码分析之Handler机制
- handler机制的源码分析
- Android源码分析--Handler机制的实现与工作原理
- Handler机制.源码分析
- JBPM源码分析(一)---数据库表主键ID的产生机制
- Struts-menu源码分析(转贴)