作为一名Android工程师,了解Framework层对工作有什么帮助吗?

2020-12-04 17:36:02 浏览数 (1)

最近有一个朋友向我问了一个这样的问题:

作为一个应用开发工程师,在网上有看到过大家都说了解系统源码,例如四大组件启动流程及IPC,Binder通信原理这些。而且我也有去看过,也觉得源码写的确实很精彩。但是,好像发现对实际工作上的帮助好像不太大。阅读framework源码是在性能调优上以及自己开发框架轮子等有帮助吗还是?

今天就以这个问题给大家讲解一下framework相关知识。

Framework的重要性

其实不需要别的,你去 Github 上看一下 腾讯 Matrix 的源码,就知道 Framework 的知识有多重要了。

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

另外 Framework 作为 Android 框架层,为 App 提供了众多 API 去调用 ,但是很多机制都是 Framework 包装好了给 App 来用的,如果不知道这些机制的原理,那么很难去在这基础上做优化。

举个例子,如果你了解 Android App 的启动机制,优化启动速度的时候会更得心应手:

定制什么样的 StartingWindow;什么时候可以拿到图片的宽高;DelayLoad 怎么做才会更合适;Service 什么时候启动可以不影响启动速度;Activity onResume 回调的时候真的可见了么?Redex 为什么会加快应用启动速度?

再比如我们经常说的 Handler,MessageQueue,Looper。看源码你就可以更好的理解那些概念:ThreadLocal 做什么的;Thread 和 Handler 的关系;为什么不能在子线程更新 UI?

再比如说 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 通信耗时也会导致卡顿,60 fps 下没问题的 app 90fps 下也可能会卡顿,有时候低内存下你主线程读个文件可能都会导致卡顿。真正明白了卡顿的原理,再面对卡顿问题就不会那么慌了(Choreographer,VSync,SurfaceFlinger,Binder)。

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

以上只是个人的一些拙见,希望可以帮到你!

面试中那些Framework相关的问题

通常作为一个Android APP开发者,我们并不关心Android的源代码实现,不过随着Android开发者越来越多,企业在筛选Android程序员时越来越看中一个程序员对于Android底层的理解和思考,这里的底层主要就是Android Framewok中各个组件的运行原理,例如Binder的运行机制、ServiceManager的作用等等。

在Android面试中,关于 Framework 的问题是必备的,但是这些关于字节跳动 Framework 的高频面试题你都掌握了吗?

比如字节面试官常问的Framework问题知识点:

1.AMS 、PMS 2.Activity 启动流程,App 启动流程 3.Binder 机制(IPC、AIDL 的使用) 4.为什么使用 Parcelable,好处是什 么? 5.Android 图像显示相关流程,Vsync 信号等 .......

怎么学习Framework?

阅读源码永远是学习最快的方式。

所以这里为大家整理了Android开发相关源码精编解析,其中关于Framework与Binder的源码解析内容:

目录

第一节 Binder 系列—开篇 第二节 Binder Driver 初探 第三节 Binder Driver 再探 第四节 Binder 启动 ServiceManager 第五节获取 ServiceManager 第六节注册服务(addService) 第七节获取服务(getService) 第八节 framework 层分析 第九节如何使用 Binder 第十节如何使用 AIDL 第十一节 Binder 总结 第十二节 Binder 面试题全解析

以上内容均放在了开源项目:【github】 中已收录,里面包含不同方向的自学Android路线、面试题集合/面经、及系列技术文章等,资源持续更新中...

不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的沉淀和技术的积累。

当你发现自己不懂的知识越来越多的时候,证明你懂的知识越来越多。

0 人点赞