关于Handler机制以及Handler、Message、Looper的关系
来源:互联网 发布:薛之谦淘宝店铺号 编辑:程序博客网 时间:2024/05/21 05:42
本人应届生一枚,由于找工作需要,最近又重新撸了一遍Handler机制,正好借此机会养成写文档的好习惯,从此以后做一个游荡于csdn以及各个技术网站的孤魂野鬼。
首先,关于handler机制的机制类型,它是一个异步回调机制(至于异步回调是什么鬼,请自行百度)。
其次,我们一般在什么时候使用handler?
答:handler一般作用于线程之间的异步操作。
我们在了解Handler的时候,主要需要了解的就是Handler、Message、以及Looper之间的关系。
那么我们从Looper开始说起。
在线程刚刚启动的时候会通过ThreadLocal来新建一个Looper,然后Looper会创建一个MessageQueue,也就是存放我们发送的Message的地方啦。Looper会调用Looper.loop()方法指定当前的Handler,然后无限的去循环直至MessageQueue里面的每一个Message都被取出来通过dispathMessage(Message msg)方法将msg发送给指定的Handler。当MessageQueue里面没有Message的时候,线程就会阻塞,以保证内存的正常使用。这里需要注意的是ThreadLocal的作用就是保证每个线程只有一个指定的Looper。
public static final void prepare() {
if (sThreadLocal.get() != null) {
throw new RuntimeException(“Only one Looper may be created per thread”);
}
sThreadLocal.set(new Looper(true));
}
从这里我们就能看出每个线程只能有一个ThreadLocal对象;
然后我们再说Handler,我们在创建Handler之前必须先创建Looper,然后将Handler与Looper进行关联,而且由于我们需要将Message发送给指定的MessageQueue,如果不创建Looper我们就不知道将消息发送给谁。在创建的时候,线程会先查询消息池中是否有消息,如果有消息,直接取出来使用,如果没有就创建消息,我们通过Message.obtain()方法从消息池中取消息.。然后通过sendMessageAtTime()方法获取内部的MessageQueue,然后通过其中的enqueueMessage*(msg,uptimeMillis)*将消息发送到指定的MessageQueue中。
总结起来就是Looper是用来创建和管理MessageQueue的,它通过无限循环将MessageQueue中的Message取出,通过dispatMessage()方法发送给Handler。Handler是用来发送、接收和处理Message的,在创建Handler之前必须创建一个Looper然后与之关联,最后通过sendMessageAtTime()方法指定MessageQueue对象,并且发送Message。需要注意的是MessageQueue是一个单链表而不是一个队列,各位亲们不要被名字所迷惑了奥!!
代码出处出自鸿扬大神Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
- 关于Handler机制以及Handler、Message、Looper的关系
- Handler,Message,Looper的关系
- Android 消息机制 以及Message、Handler、Message Queue、Looper之间的关系。
- looper,handler,message关系
- Handler Looper Messagequeue Message 细节以及关系
- Android消息处理机制---Looper、Handler、Message之间的关系
- Thread,Looper,Handler,Message,MessageQueue原理机制以及它们之间的关系
- handler message looper机制
- handler:message:looper机制
- Android的Message机制---Handler、Message、Looper
- 关于消息机制handler message looper的学习总结
- Handler Looper Message MessageQueue 的关系
- android Looper Message Handler中三者的关系
- Message、Handler、MessageQueue、Looper之间的关系
- Looper、Message和Handler的关系
- Message,Handler,MessageQueue,Looper之间的关系
- 【Android基础知识】Handler、Message、Looper的关系
- Handler,Looper,Message,MessageQueue的关系
- 任务布置之HTTP相关概念
- Carbide 节点权限问题
- java.util.concurrent.AbstractExecutorService.java
- Javascript获取缓存和清除缓存API(转载)
- 多行文字居中
- 关于Handler机制以及Handler、Message、Looper的关系
- 协同过滤CF和基于内容推荐CB区别
- php对象
- 遍历Map的方式
- 【Android View源码分析(一)】setContentView加载视图机制深度分析
- Java 网络编程四 C/S B/S(例:模拟浏览器、服务器、网络爬虫)
- iOS提上传包报错:No suitable application records were found. Verify your bundle identifier 'xx' is correct
- windows10软链接时失败时的删除操作
- SqueezeDet:一种应用于自动驾驶实时目标检测中的标准、小型、低功耗的全卷积神经网络(二)