Android的Handler机制深入浅出
Posted fesng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android的Handler机制深入浅出相关的知识,希望对你有一定的参考价值。
1.Message Looper MessageQuene Handler关系
Message:携带信息和执行者(Handler Runnable)
MessageQuene:传送带。
内部也是链表结构处理Meesage,根据Message携带的time信息,到点了通过next()方法把Message取出来,是looper内部成员。
Looper:是发动机。
prepare()方法初始化messageQuene。loop()发动传送带。
任何线程使用handler都需要使用以上两部发动传送带。除了主线程,因为主线程在threadActivoity的main()方法(这是app的入口,类似java的main方法)已经初始化了。
使用ThreadLocal计数存在mThreadLocal中。线程,Lopper,MessageQuene一一对应,对应多个Handler。Handler唯一持有一个looper,messageQuene,属于唯一的thread。
handler:工人。
发送和处理message。
其中looper和MessageQuene在Native层在存在对应的C++类,使用的是管道和epoll机制来不断处理message。
2.Message设计模式和成员
命令设计模式
下面是内部变量。
callback存储post(runnable)里面的runnable
target就是存储处理他的handle
命令设计模式:这里是命令设计模式,命令和执行者分离,message携带执行者Handler。messagequene取出来执行不会混乱。
享元设计模式
下面是讲台变量。
静态变量介绍
sPoolSync是用来对象同步的。
sPoolSize计数。
sPool是链表的头指针。
message是享元设计模式:整个安卓就是message时间驱动,为了重复利用Message。message内部还有一个变量就是next,内部是链表来管理的。
每次Message.obtain()获取成员就是把sPool指针后移。
链表的加入实在Message的回收方法里面,会清理Message成员,然后判断size没有超过最大值,就加入链表头部sPool。
以上是关于Android的Handler机制深入浅出的主要内容,如果未能解决你的问题,请参考以下文章
深入理解Android Handler机制(深入至native层)