【Android FrameWork】综合面试问题

  • Choreorgapher

原理

  • 每一个线程都有一张表,其实就是一个数组,key和value都存储在数组中

  • key存储在weakReference中,value对应对象如Looper、Choreorgapher等

  • 一个应用里可以定义多个ThreadLocal,ThreadLocal都有自己的哈希值,哈希值根据hashCounter计算

  • 算出hash值之后,对表的size取余数,就能算出key:value在表中的index值

  • 如果发生了hash冲突,就会从当前index开始向下遍历数组,放在空闲的位置上

  • 代码如下:

总结

  • 同一个ThreadLocal对象,在不同线程get返回不同value

  • Thread对象里有张表,保存ThreadLocal到value的映射关系

  • 这张表是怎么实现的?(见上面的原理分析)

  • 是如何解决hash冲突的?(见上面的原理分析)

3. 说说Looper的副业(待完善)

  • Looper里可以监听其它描述符

  • 创建管道,跨进程传数据,用looper监听描述符事件

4. 怎么检查线程有耗时任务

两种情况

  • 正常的,轻微阻塞

  • 不正常的,严重阻塞

检测机制

  • WatchDog:

  • Framework自带,检查system_server中系统服务是否正常

  • 用于检查死锁或者线程异常

  • BlockCanary

  • 开源框架,用于检

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值