前两天,我跟一个面试官聊天,发现一个普遍现象,不少候选人,对Framework的认知,还处在比较基础的阶段,以为会写几个UI、业务代码就足够了,那些工作中经常遇到的复杂场景问题和性能问题,却支支吾吾答不上来,比如常说的 Handler,MessageQueue,Looper。看源码你就可以更好的理解那些概念:
- ThreadLocal 做什么的?
- Thread 和 Handler 的关系
- 为什么不能在子线程更新 UI?
- idleHandler 什么时候运行?
- 主线程为什么循环却不会卡死?
- ContentProvider、Broadcast、Service 是怎么利用 Message 监控 ANR 的?
再比如说 Android 的卡顿掉帧问题,很多文章都说卡顿是由于主线程耗时造成的,这其实只是一部分,其他的比如:
- RenderThread 耗时也会导致卡顿
- Binder 通信耗时也会导致卡顿
- 60 fps 下没问题的 app 90fps或者 120fps 下也可能会卡顿
- 有时候低内存下你主线程读个文件可能都会导致卡顿
作为过来人,发现很多学习者和实践者都在 Android Framework上面临着很多的困扰,比如:
- 工作场景中遇到难题,往往只能靠盲猜和感觉,用临时性的补救措施去掩盖,看似解决了问题,但下次同样的问题又会发作,原因则是缺乏方法论、思路的指引以及工具支持&#x