浅谈对handle的理解
来源:互联网 发布:极客学院java百度网盘 编辑:程序博客网 时间:2024/06/05 23:43
handler是Android中重要的消息机制,我们在平常的开发中也是经常接触到的,下面是我个人总结的一些观点和理解,希望和大家分享一起讨论。
首先呢,Handler的主要工作是采用当前线程的Loop来构建内部的消息循环系统。讲到handle就不得不提起MessageQueque和loop了,毕竟这哥三可是好基友啊!其中,MessageQueque顾名思义,就是消息队列的意思,它里面主要有这两种方法,一个是send(),一个是enQueueMessage(),以队列的形式的发送和插入消息。虽然它叫做消息队列,但是其内部结构却是单向的链表,就像我们平时看到一些人看着很壮实,实际上是个娘炮。哈哈哈,不知道这个比喻是不是能更容易接受。而Looper呢,翻译过来就是循环了,你想想啊,MessageQueque是个只能存储消息,但是它处理不了消息,这时候它的二哥looper就上场了,它可是个出了名的勤劳,一上来就给自己套了一个死循环,一直去寻找消息,如果没找到,就在那边等待,没错,就是应用了很像线程池的原理。啥?你说looper使用了死循环没有发生ANR?只能说小伙子你还年轻,如果你仔细的去看源码就会发现其实很多都是有由linux和c++编程的,并不是仅仅只用了java ,这边的
for
(;;) {
Message msg = queue.next();
// might block
if
(msg ==
null
) {
// No message indicates that the message queue is quitting.
return
;
}
既然说到了looper,就要提提其中的一个特殊存在Threadlocal,别看人家前面是thread就以为它是线程,它的作用是在每个线程中存储数据,当Handler创建之后,就是通过Threadlocal来获取当前线程的looper才能工作的。Threadlocal的工作场景比较特殊,1,需要在线程作为作用域,2,不同的线程之间具有不用的数据副本的时候。比如还有采用事件监听的时候,在一些函数调用栈深的情况下,使用起来还是杠杠滴好。记住一句话,一个线程内对应的只有一个loop,这个是唯一的!Threadlocal内部的数据遵循着相互隔离,互不干扰的原则,也就是线程隔离,里面存储的形式就是用key,vaues的哈希i形式。
然后呢,
这个图呢是在动脑直播的时候截图下来的,贼清晰,里面的工作原理就一目了然了,Handler先进行消息的发送,发到了MessageQueque那边,looper就是个传送带,loop.prepare()就是个动力开关,然后通过Looper.loop()来开启消息循环,直到消息执行了next(),返回null为止,这期间handle有一个handerCallBack()把消息回传给了handler,这就是Handler的通讯机制啦。
- 浅谈对handle的理解
- Android中对Handle机制的理解
- Android中对Handle机制的理解
- Android中对Handle机制的理解
- 句柄(Handle)是什么--对句柄的简单理解。
- 浅谈对rss的理解
- 浅谈对Window的理解
- 浅谈对ActiveMQ的理解
- 浅谈对this的理解
- 浅谈对spring的理解
- 浅谈对spark的理解
- 浅谈对Context的理解
- 浅谈对DHCP的理解
- 浅谈对软件工程的理解
- andriod handle 的理解
- 浅谈创业者对品牌的理解误区
- 浅谈 “我对 HOOKPE 的理解”
- 浅谈对C语言指针的理解
- JAVA操作HBASE数据操作详解
- Java中的Filter过滤器
- 算法导论习题自作2.1-2
- 【JZOJ5296】【清华集训模拟】Sequence(整体二分)
- HDU 1690 Bus System(Floyd)
- 浅谈对handle的理解
- ZigBee CC2530 Z-Stack 19 单播通信2-64位地址模式
- CDN是什么?使用CDN有什么优势?
- URL、SRC、href之间的区别
- scala隐式转换函数
- Docker安装Nginx环境
- 进程间通信的方式
- 初步认识JVM
- JAVA操作Hbase管理类HbaseManage基本详细操作