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消息机制

深入分析Android-Handler消息机制

深入分析Android Handler消息机制

深入理解Android Handler机制(深入至native层)

深入理解Android Handler机制(深入至native层)

带你深入理解Android Handler机制