handler消息处理机制

来源:互联网 发布:郑州网络推广 编辑:程序博客网 时间:2024/04/30 20:26

三个核心类LooperHandlerMessage

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=thishandler发送的message贴上当前handler的标签

7.开启HandlerThread线程,执行run方法。

8.HandlerThread类的run方法中开启轮询器进行轮询:调用Looper.loop()方法进行轮询消息队列的消息

9.在消息队列MessageQueueenqueueMessage(Message msg, long when)方法里,对消息进行入列,即依据传入的时间进行消息入列(排队)

10.轮询消息:与此同时,Looper在不断的轮询消息队列

11.Looper.loop()方法中,获取到MessageQueue对象后,从中取出消息(Message msg = queue.next()),如果没有消息会堵塞

12.分发消息:从消息队列中取出消息后,调用msg.target.dispatchMessage(msg);进行分发消息

13.将处理好的消息分发给指定的handler处理,即调用了handlerdispatchMessage(msg)方法进行分发消息。

14.在创建handler时,复写的handleMessage方法中进行消息的处理

15.回收消息:在消息使用完毕后,在Looper.loop()方法中调用msg.recycle(),将消息进行回收,即将消息的所有字段恢复为初始状态。




0 0
原创粉丝点击