Handler分析--①Message(2)

参考Handler

Message源码分析

主要对外的数据类型

// 用户自定义的消息代码,以便收件人可以识别此消息的内容。
public int what;
// 使用下面4个设置需要传输的数据
public int arg1;
public int arg2;
public Object obj;
Bundle data;
// 消息需要被执行的时间,注意这里是 SystemClock.uptimeMillis()
// 表示系统开机到当前的时间总数,单位是毫秒,但是,当系统进入深度睡眠(CPU休眠、屏幕休眠、设备等待外部输入)时间就会停止
public long when;
// callback
Runnable callback;

Message全局池

全局池(缓存池)主要作用就是避免在多数情况下重新创建新对象.

// class锁
public static final Object sPoolSync = new Object();
// Message池,以单链表的形式实现
private static Message sPool;
Message next;
// 目前池的大小
private static int sPoolSize = 0;
// 池的最大容量
private static final int MAX_POOL_SIZE = 50;
// Message正在使用/已被回收的标志位
int flags;
// 回收Message,判断标志位状态,异常时要不要报错,默认报错
private static boolean gCheckRecycle = true;

// 从池中获取一个Message实例对象
public static Message obtain() {
// 线程安全的单链表移除数据操作,移除并获取队首数据
synchronized (sPoolSync) {
// 判空操作,常量池没有数据直接new,有的话则拿出一个返回,单链表操作
if (sPool != null) {
Message m = sPool;
sPool = m.next;
m.next = null;
// 把flag设置为0,池中的状态 flags = FLAG_IN_USE
m.flags = 0; // clear in-use flag
sPoolSize–;
return m;
}
}
return new Message();
}

// 带状态检查的回收
public void recycle() {
// 判断flag状态
if (isInUse()) {
// flag != 0时根据gCheckRecycle值判断要不要报错(默认是报错的)
if (gCheckRecycle) {
throw new IllegalStateException("This message cannot be recycled because it "

  • “is still in use.”);
    }
    return;
    }
    // 不检查状态回收
    recycleUnchecked();
    }

// 不检查状态回收
void recycleUnchecked() {
// 设置flag为已回收状态
flags = FLAG_IN_USE;
// 数据初始化
what = 0;
arg1 = 0;
arg2 = 0;
obj = null;
replyTo = null;
sendingUid = UID_NONE;
workSourceUid = UID_NONE;
when = 0;
target = null;
callback = null;
data = null;

// 线程安全的单链表增加数据操作,把回收的Message放在队首

最后

我的面试经验分享可能不会去罗列太多的具体题目,因为我依然认为面试经验中最宝贵的不是那一个个具体的题目或者具体的答案,而是结束面试时,那一刻你的感受以及多天之后你的回味~

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家

在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

【算法合集】

【延伸Android必备知识点】

【Android部分高级架构视频学习资源】

**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
级、架构师对你更是如鱼得水,赶快领取吧!

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值