欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android工程师需要掌握什么(软件开发自学步骤)

程序员文章站 2022-06-16 11:49:28
最近有一个朋友向我问了一个这样的问题:作为一个应用开发工程师,在网上有看到过大家都说了解系统源码,例如四大组件启动流程及ipc,binder通信原理这些。而且我也有去看过,也觉得源码写的确实很精彩。但...

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

作为一个应用开发工程师,在网上有看到过大家都说了解系统源码,例如四大组件启动流程及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 开发的一部分,底层的实现庞大而又复杂,不用心去读源码很难将知识点深入理解。

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

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 信号等
…….android工程师需要掌握什么(软件开发自学步骤)

android framework 高频面试题解析

怎么学习framework?

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