近十几年来 , 随着以Android系统为代表的智能手机普及与发展 , 互联网行业早已进入“移动”的时代 。但是现如今的“风口”已经从移动转向 , 整个移动互联网行业正处于增量下降、存量厮杀的阶段 。面对技术更新迭代加速 , 前景不太明朗 , 很多开发者都感到了有些焦虑和迷茫 。并且 , 在如此的大环境下 , 整个行业头部企业 , 越来越重视产品的体验与成本 , 对中高级的开发者的能力要求也越来越高 。
现在大厂面试时 , 我们经常会被问到这些问题:
- 为什么Zygote通信fork进程 , 使用的是socket , 而不是Android的Binder?
- 为什么是从zygote进程fork App , 而不是其他进程?
- Binder在做数据传输过程中 , 最大的数据量限制是多少?
- 打开一个Activity的过程中经历过几次跨进程调用?
- ANR弹框的原理是什么?
- ……
文章插图
大部分Android开发者一遇到这种面试题就直接懵逼了 , 不少人不是没有看过相关的解答 , 但也都只是浅尝辄止 , 没有深入掌握其中原理 , 面试的时候自然会被问个措手不及 。
文章插图
下面这张图想必大家都看过 , google官方提供过一张经典的平台架构图 , 从下往上依次分为:linux内核、硬件抽象层、Native层、JAVA Framework层、App层 , 每一层都包含大量的子模块或子系统 。
文章插图
可以看到具体app的下面就是Framework层的支撑 。所以掌握Framework层非常有助于我们开发出一个性能良好的App , 另外在大厂的面试过程中 , Framework也是高阶面试时必问的问题 。
Framework 知识广泛应用在Android各个领域中 , 重要性显而易见 。成为一名Android Framework高手 , 也是目前招聘过程中非常稀缺的人才 , 可以成为你的敲门砖 。
Framework始终穿插在 App 整个研发生命周期中 , 不管是从 0 到 1 的建立阶段 , 还是从 1 到 N 打磨阶段 , 都离不开Framework 。
在所有的Framework知识中 , 要数最重要的还是AMS , 主打和Activity,Service,ContentProvider,Broadcast等交互:
文章插图
看一下上图 , Activity启动 , 涉及到ActivityThread,AMS,H类 , 上述过程还涉及到多次跨进程调用 , 涉及到各种binder的知识 。
搞清楚这些:我们就可以去研究各种黑科技 , 例如在做插件化的时候 , 你需要占坑Activity等 , hook代码等都是在和AMS斗智斗勇;在做性能优化的时候 , 你也要了解AMS是如何调度Activity的 , 消息队列是如何运转的 。
但AMS本身比较复杂、难以理解 , 许多工作多年的Android开发者也很难弄清AMS的作用 。于是 , 系统的整体运行过程就成为了大厂面试的重灾区 。
比如下面这张Android启动流程图 , 不少人都看过 , 但少有人沉下心去仔仔细细的研究过 。
文章插图
作为过来人 , 我发现很多学习者和实践者都在 Android Framework上面临着很多的困扰 , 比如:
- 工作场景中遇到难题 , 往往只能靠盲猜和感觉 , 用临时性的补救措施去掩盖 , 看似解决了问题 , 但下次同样的问题又会发作 , 原因则是缺乏方法论、思路的指引以及工具支持;
- 能力修炼中 , 缺乏互联网项目这一实践环境 , 对Framework只能通过理论知识进行想象 , 无法认识其在工作实战中的真实面目和实操过程;
- 职场晋升中 , 只管功能开发 , 不了解底层原理 , 缺少深入地思考与总结 , 无法完成复杂系统设计这类高阶工作 , 难以在工作中大展拳脚 , 而有挑战的工作往往留给有准备的人 。
推荐阅读
- 专业网站SEO人员精通的基础技能
- MyBatis自动生成工具,开发编码好帮手
- HarmonyOS App开发之组件布局类
- 如何在开发中规避硬编码
- 家居装修类的在线接单APP定制开发案例赏析
- 开发者的瑞士军刀「GitHub 热点速览 v.22.04」
- 2022年Web开发人员最佳vscode扩展
- 卷起来!抖音Android包体积优化探索
- FFmpeg 开发——将视频 YUV 格式编码成 H264
- 前端开发之动态管理Nginx集群的方法