做Android 开发这么久,还不明白 Android Fram

2022-11-23  本文已影响0人  像程序那样去思考

Framework作为Android的框架层,为App提供了很多API调用,但很多机制都是Framework包装好后直接给App用的,如果不懂这些机制的原理,就很难在这基础上进行优化。

从做Android的第一天起,你一定听过无数次关于Framework的讨论,也曾在这个版块被面试官吊锤N次。

像启动监控、掉帧监控、函数插桩、慢函数检测、ANR监控,都需要比较深入的了解Framework,才能知道怎么去监控、利用什么机制监控、函数插桩插到哪里、反射调用该反射哪个类哪个方法哪个属性……

比如,如果你深入了解了Android App的启动机制,做启动优化一定会更加得心应手:

  1. 定制什么样的StartingWindow?
  2. 什么时候可以拿到图片的宽高?
  3. DelayLoad怎么做才会更合适?
  4. Service什么时候启动可以不影响启动速度?
  5. Activity onResume回调的时候真的可见了么?
  6. ContentProvider会不会影响启动速度?为什么会影响?

比如我们经常说的Handler、MessageQueue、Looper。看源码你就可以更好的理解那些概念:

  1. Thread和Handler的关系
  2. 为什么不能在子线程更新UI?
  3. idleHandler什么时候运行?
  4. 主线程为什么循环却不会卡死?
  5. 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的卡顿掉帧问题,很多文章都说卡顿是由于主线程耗时造成的,这其实只是一部分,其他的比如:

真正明白了卡顿的原理,再面对卡顿问题也不会再手足无措。

正所谓知其然知其所以然,API 只是 Android 开发的一部分,底层的实现庞大而又复杂,不用心去读源码很难将知识点深入理解。

Android Framework到底怎么学? 成为了很多人迫在眉睫的问题,关于如何学习Android Framework开发知识,仍在迷茫的开发们可以参考这份进阶文档《Android Framework 源码开发手册》,今天在这里分享给大家:

获取方法: 关注公众号<Android苦做舟> 或 联系作者 领取~

Handler

Binder

Zygote

AMS

PMS

WMS

获取方法: 关注公众号<Android苦做舟> 或 联系作者 领取~

上一篇 下一篇

猜你喜欢

热点阅读