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。

发布了586 篇原创文章 · 获赞 1037 · 访问量 186万+

猜你喜欢

转载自blog.csdn.net/u010321471/article/details/94223316