Framework作为Android的框架层,为App提供了很多API调用,但很多机制都是Framework包装好后直接给App用的,如果不懂这些机制的原理,就很难在这基础上进行优化。
从做Android的第一天起,你一定听过无数次关于Framework的讨论,也曾在这个版块被面试官吊锤N次。
像启动监控、掉帧监控、函数插桩、慢函数检测、ANR监控,都需要比较深入的了解Framework,才能知道怎么去监控、利用什么机制监控、函数插桩插到哪里、反射调用该反射哪个类哪个方法哪个属性……
比如,如果你深入了解了Android App的启动机制,做启动优化一定会更加得心应手:
- 定制什么样的StartingWindow?
- 什么时候可以拿到图片的宽高?
- DelayLoad怎么做才会更合适?
- Service什么时候启动可以不影响启动速度?
- Activity onResume回调的时候真的可见了么?
- ContentProvider会不会影响启动速度?为什么会影响?
比如我们经常说的Handler、MessageQueue、Looper。看源码你就可以更好的理解那些概念:
- Thread和Handler的关系
- 为什么不能在子线程更新UI?
- idleHandler什么时候运行?
- 主线程为什么循环却不会卡死?
- ContentProvider、Broadcast、Service是怎么利用Message监控ANR的?
比如说Android进程管理机制。AMS把Android进程按照一定的规则,设置不同的优先级,在内存比较低的时候,高优先级的App比低优先级的App更不容易被系统干掉!那么AMS是按照什么规则来设置优先级的呢?了解这些规则是不是可以提高App的存活率呢?这些都是可以通过熟读AMS的代码知道的。
再比如说Activity启动的模式,可能你会熟练使用各种模式,但是如果你学习Framework中Activity和进程的管理,知道Activity栈和Task的管理。那么你会对这启动模式的使用更加深刻。
再比如说View中的Hardware Layer,如果你只知道“在动画开始前将View设置为Hardware/Software Layer,做完动画再设置回去”,那么你会发现,在有些场景下,这么做会让动画变流畅,但是某些情况下动画会变得更差。如果不了解View的Hardware/Software Layer实现机制,盲目地给所有动画都这么设置,那么性能问题是在所难免的。
还有Android的卡顿掉帧问题,很多文章都说卡顿是由于主线程耗时造成的,这其实只是一部分,其他的比如:
- RenderThread耗时也会导致卡顿
- Binder通信耗时也会导致卡顿
- 60fps下没问题的App 90fps或者120fps下也可能会卡顿
- 有时候低内存下你主线程读个文件可能都会导致卡顿
真正明白了卡顿的原理,再面对卡顿问题也不会再手足无措。
正所谓知其然知其所以然,API 只是 Android 开发的一部分,底层的实现庞大而又复杂,不用心去读源码很难将知识点深入理解。
Android Framework到底怎么学? 成为了很多人迫在眉睫的问题,关于如何学习Android Framework开发知识,仍在迷茫的开发们可以参考这份进阶文档《Android Framework 源码开发手册》
,今天在这里分享给大家:
获取方法:
关注公众号<Android苦做舟
> 或 联系作者
领取~
Handler
- 宏观理论分析与Message源码分析
- MessageQueue的源码分析
- Looper的源码分析
- handler的源码分析
- ……
Binder
- 学习Binder前必须要了解的知识点
- ServiceManager中的Binder机制
- 系统服务的注册过程
- ServiceManager的启动过程
- 系统服务的获取过程
- Java Binder的初始化
- Java Binder中系统服务的注册过程
- ……
Zygote
- Android系统的启动过程及Zygote的启动过程
- 应用进程的启动过程
- ……
AMS
- Activity生命周期管理
- onActivityResult执行过程
- AMS中Activity栈管理详解
- ……
PMS
- PMS的启动过程和执行流程
- APK的安装和卸载源码分析
- PMS中intent-filter的匹配架构
- ……
WMS
- WMS的诞生
- WMS的重要成员和Window的添加过程
- Window的删除过程
- ……
获取方法:
关注公众号<Android苦做舟
> 或 联系作者
领取~
网友评论