三个核心类:Looper,Handler和Message,
MessageQueue(消息队列)在Looper内部
Looper.prepare();//将当前线程初始化为Looper线程
Looper.loop();// 开始循环处理消息队列
handler机制:
1.在创建Activity之前,在系统启动的时候先加载ActivityThread类,在这个类的main函数中,调用Looper.prepareMainLooper()进行初始化Looper对象。
2.创建主线程的handler对象
3.创建ActivityThread对象
4.调用Looper.loop(),不断的进行轮询消息队列中的消息
5.sendMessage()将消息发送给消息队列
6.在发送消息的时候,使用message.target=this为handler发送的message贴上当前handler的标签
7.开启HandlerThread线程,执行run方法。
8.在HandlerThread类的run方法中开启轮询器进行轮询:调用Looper.loop()方法进行轮询消息队列的消息
9.在消息队列MessageQueue中enqueueMessage(Message msg, long when)方法里,对消息进行入列,即依据传入的时间进行消息入列(排队)
10.轮询消息:与此同时,Looper在不断的轮询消息队列
11.在Looper.loop()方法中,获取到MessageQueue对象后,从中取出消息(Message msg = queue.next()),如果没有消息会堵塞
12.分发消息:从消息队列中取出消息后,调用msg.target.dispatchMessage(msg);进行分发消息
13.将处理好的消息分发给指定的handler处理,即调用了handler的dispatchMessage(msg)方法进行分发消息。
14.在创建handler时,复写的handleMessage方法中进行消息的处理
15.回收消息:在消息使用完毕后,在Looper.loop()方法中调用msg.recycle(),将消息进行回收,即将消息的所有字段恢复为初始状态。