Android开发精通Framework是真的可以为所欲为

近十几年来 , 随着以Android系统为代表的智能手机普及与发展 , 互联网行业早已进入“移动”的时代 。但是现如今的“风口”已经从移动转向 , 整个移动互联网行业正处于增量下降、存量厮杀的阶段 。面对技术更新迭代加速 , 前景不太明朗 , 很多开发者都感到了有些焦虑和迷茫 。并且 , 在如此的大环境下 , 整个行业头部企业 , 越来越重视产品的体验与成本 , 对中高级的开发者的能力要求也越来越高 。
现在大厂面试时 , 我们经常会被问到这些问题:

  • 为什么Zygote通信fork进程 , 使用的是socket , 而不是Android的Binder?
  • 为什么是从zygote进程fork App , 而不是其他进程?
  • Binder在做数据传输过程中 , 最大的数据量限制是多少?
  • 打开一个Activity的过程中经历过几次跨进程调用?
  • ANR弹框的原理是什么?
  • ……
每当这时候 , 内心真是一万只槽泥马奔腾而过……
Android开发精通Framework是真的可以为所欲为

文章插图
 
大部分Android开发者一遇到这种面试题就直接懵逼了 , 不少人不是没有看过相关的解答 , 但也都只是浅尝辄止 , 没有深入掌握其中原理 , 面试的时候自然会被问个措手不及 。
Android开发精通Framework是真的可以为所欲为

文章插图
 
下面这张图想必大家都看过 , google官方提供过一张经典的平台架构图 , 从下往上依次分为:linux内核、硬件抽象层、Native层、JAVA Framework层、App层 , 每一层都包含大量的子模块或子系统 。
Android开发精通Framework是真的可以为所欲为

文章插图
 
可以看到具体app的下面就是Framework层的支撑 。所以掌握Framework层非常有助于我们开发出一个性能良好的App , 另外在大厂的面试过程中 , Framework也是高阶面试时必问的问题 。
Framework 知识广泛应用在Android各个领域中 , 重要性显而易见 。成为一名Android Framework高手 , 也是目前招聘过程中非常稀缺的人才 , 可以成为你的敲门砖 。
Framework始终穿插在 App 整个研发生命周期中 , 不管是从 0 到 1 的建立阶段 , 还是从 1 到 N 打磨阶段 , 都离不开Framework 。
在所有的Framework知识中 , 要数最重要的还是AMS , 主打和Activity,Service,ContentProvider,Broadcast等交互:
Android开发精通Framework是真的可以为所欲为

文章插图
 
看一下上图 , Activity启动 , 涉及到ActivityThread,AMS,H类 , 上述过程还涉及到多次跨进程调用 , 涉及到各种binder的知识 。
搞清楚这些:我们就可以去研究各种黑科技 , 例如在做插件化的时候 , 你需要占坑Activity等 , hook代码等都是在和AMS斗智斗勇;在做性能优化的时候 , 你也要了解AMS是如何调度Activity的 , 消息队列是如何运转的 。
但AMS本身比较复杂、难以理解 , 许多工作多年的Android开发者也很难弄清AMS的作用 。于是 , 系统的整体运行过程就成为了大厂面试的重灾区 。
比如下面这张Android启动流程图 , 不少人都看过 , 但少有人沉下心去仔仔细细的研究过 。
Android开发精通Framework是真的可以为所欲为

文章插图
 
作为过来人 , 我发现很多学习者和实践者都在 Android Framework上面临着很多的困扰 , 比如: