Android之Handler机制
来源:互联网 发布:gre软件 编辑:程序博客网 时间:2024/06/05 06:41
我在学习和使用handler的时候,在Android开发艺术探索本书中学习研究,说到handler机制,就要设计到5个类,Handler、MessageQueue、Looper、Thread、还有一个Message;
Message是消息,它由MessageQueue统一列队,由Handler处理。
Handler是处理者,他负责发送和处理Message消息。
MessageQueue指消息队列,它用来存放Handler发送过来的队列,并且按照先入先出的规则执行。
Looper的作用就像抽水的水泵,它不断的从MessageQueue中去抽取Message并执行。
Thread线程,是消息循环的执行场所。
知道了这几个类就可以说说消息机制的原理了,在创建Activity之前,当系统启动的时候,先加载ActivityThread这个类,在这个类的main函数中,调用Looper.prepareMainLooper()进行初始化Looper对象,然后创建主线程的handler对象,随后才创建ActivityThread对象,最后调用Looper.loop()方法,不断的进行轮询消息队列中的消息。也就是说,在ActivityThread和Activity创建之前,就已经开启了Looper的loop()方法,不断的进行轮询消息。
我们可以画图来说明handler机制的原理:
我们通过Message.obtain()准备消息数据之后,
第一步是使用sendMessage():通过Handler将消息发送给消息队列
第二步、在发送消息的时候,使用message.target=this为handler发送的message贴上当前handler的标签
第三步、开启HandlerThread线程,执行run方法。
4、在HandlerThread类的run方法中开启轮询器进行轮询:调用Looper.loop()方法进行轮询消息队列的消息
5、在消息队列MessageQueue中enqueueMessage(Message msg, long when)方法里,对消息进行入列,即依据传入的时间进行消息入列(排队)
6、轮询消息:与此同时,Looper在不断的轮询消息队列
7、在Looper.loop()方法中,获取到MessageQueue对象后,从中取出消息(Message msg = queue.next()),如果没有消息会堵塞
8、分发消息:从消息队列中取出消息后,调用msg.target.dispatchMessage(msg);进行分发消息
9、将处理好的消息分发给指定的handler处理,即调用了handler的dispatchMessage(msg)方法进行分发消息。
10、在创建handler时,复写的handleMessage方法中进行消息的处理
11、回收消息:在消息使用完毕后,在Looper.loop()方法中调用msg.recycle(),将消息进行回收,即将消息的所有字段恢复为初始状态。
- Android之handler机制
- Android之Handler机制
- Android之Handler机制
- Android之Handler机制
- android 机制之handler机制
- android消息机制 之Handler
- Android之Handler消息机制
- Android之Handler消息机制
- Android之Looper-Handler机制
- Android多线程机制之Handler
- Android之Handler消息机制
- Android消息机制之Handler
- Android消息机制之Handler
- Android09--Android之Handler机制
- Android之Handler消息机制
- Android机制之Handler解析
- Android消息机制之Looper和Handler
- Android学习之Handler通信机制
- leetcode-java-257. Binary Tree Paths
- 数据结构实验之排序七:选课名单
- gcc 学习笔记(备忘)
- HDU Problem 1179 Ollivanders: Makers of Fine Wands since 382 BC.【二分图匹配】
- 数组排序 —— 快排算法思想应用(三色排序)
- Android之Handler机制
- Map的取值方式介绍
- 重载运算符
- 解决eclipse/myeclipse导入项目时出现红色叹号的方法
- memcache的介绍与应用场景
- java算法3 选择
- poj 3685 二分套二分
- poj1971:Parallelogram Counting
- android的Activity管理