Handler源码解析2

Handler源码解析1

https://blog.csdn.net/qq_44076155/article/details/110676740

Handler源码解析2

https://blog.csdn.net/qq_44076155/article/details/110687066

 

享元设计模式

内存复用,使用同一块内存空间,bitmap,recycleView都有使用这种思想

 

在loop从消息队列中取出消息并分发完后,并不会把消息对象销毁,而是通过msg.recycleUnchecked()方法清空消息放入消息池进行回收

这样做可以避免反复创建和销毁msg对象,造成内存抖动和oom

创建消息的时候使用obtain方法从内存中取,不用反复申请内存空间

 

同步屏障

可以屏蔽同步消息,来优先执行系统中重要的异步消息

命中if后,进入循环过滤掉同步消息,而msg.target=null 的时候该消息就是一个同步屏障

例如屏幕刷新,ANR通知等重要消息就可以优先通过这种方式执行

 

HandlerThread

HandlerThread是Thread的子类,严格意义上来说就是一个线程,只是它在自己的线程里面帮我们创建了Looper

HandlerThread 存在的意义如下:

1) 方便使用:a. 方便初始化,b,方便获取线程looper

2)保证了线程安全

 

我们在子线程中使用Looper需要通过    Looper.prepare()    Looper.loop()两个步骤,而且还不能保证线程安全

看看handlerThread中的处理

在run方法里面为我们封装好了这两个方法

两个方法加了隐式锁

 

 

1.可以有无数个

2.一个,通过threadLocal来保证

3.内部类持有外部类的对象,而生命周期不一致。具体是msg.target持有了handler对象,而handler对象持有了外部类的activity对象,当activity销毁时,msg没有销毁导致的内存泄漏

4.mlooper.prepare 和 mlooper.loop

5.调用quit,结束loop循环

6.synchronized锁

7. obtain

8.ANR是事件5s为响应,而looper休眠时因为没得事件执行,两者并没有关联

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值