这一部分是 Android 系统从按下电源键开始,而后到展现开机界面,再到展现桌面以前的一个过程。了解下面相关进程的工做流程,会对 Android 系统有一个总体的概念,是一个从 0 到 1 的过程,对深刻研究 Android 系统内部机制有很大帮助。git
init 进程github
了解 init 进程建立与启动的流程。算法
Zygote 进程设计模式
了解 Zygote 进程建立的流程,以及 fork 的过程。网络
system_server 进程架构
了解 system_server 进程启动流程,工做流程。ide
ServiceManager组件化
了解 ServiceManager 的启动流程,以及 ServiceManager 在系统中的做用。学习
这一部分是计算机操做系统相关的原理,也是计算机相关专业的一门必修课程,推荐学习下相关知识。职业规划
Binder
Binder 是 Android 系统中特有的一种 IPC 通讯方式,建议阅读 Binder 相关的源码,与深刻越好,理解 Binder 工做的原理,了解服务的注册、获取、死亡通知的流程。
Handler
Handler 是 Android 系统中线程间通讯的方式,已经在 Android 高级工程师部分说过了。这里必定要阅读下源码了解内部的运行机制。
Socket
Socket 是系统中常见的一种 IPC 通讯方式,Socket 的应用范围很广,在进程间通讯、网络通讯都会用到,建议深刻了解下。
Pipe
Pipe(管道)是 Linux 系统中常见的一种 IPC 通讯方式,建议深刻了解下工做原理。
signal
signal(信号量)是系统中常见的一种 IPC 通讯方式,建议深刻了解下工做原理。
Activity、Service、Broadcast、ContentProvider
了解四大组件启动流程,理解生命周期回调过程,了解工做原理。
ActivityManagerService(AMS)
理解 ActivityManagerService 工做流程,以及与 Activity 工做的流程。
WindowManagerService(WMS)
理解 WindowManagerService 工做流程,以及与 ActivityManagerService 和 Activity 工做的过程。
View、Window、Surface
理解 Activity、Window、View 之间的关系,了解 View 渲染机制。
Surface、SurfaceFlinger
理解 View 与 Surface 之间的关系,了解 SurfaceFlinger 工做流程,理解 View 渲染的过程。
PackageManagerService(PKMS)
理解 PackageManagerService 工做流程,了解 Apk 安装与卸载过程。
PowerManagerService(PMS)
理解 PackageManagerService 工做流程,了解屏幕唤醒、灭屏的过程,并理解 WeakLock 机制。
InputManagerService(IMS)
理解 InputManagerService 工做流程,理解事件的建立流程、事件分发机制,ANR 触发原理。
AudioFlinger
理解 AudioFlinger 工做流程。
AssertManager
理解 Apk 安装包中资源管理的过程。
能够从源码的角度分析异常产生的缘由,定位异常,以及处理。
内存模型
了解 JVM 内存模型,包括堆、栈、方法区、运行时常量池等。
类加载机制
了解类加载时机,类加载的过程,理解类加载器双亲委派模型。
垃圾回收机制
了解垃圾回收的缘由,理解对象生命周期,了解垃圾回收算法。
Android Gradle Plugin
经过阅读 Android Gradle Plugin 源码,理解 Gradle 构建项目的过程,了解插件开发过程。
VirtualAPK、Tinker
经过阅读 VirtualAPK 源码,理解热修复、插件化的原理。
以上就是 Android 资深(专家)工程师
的基本知识点,若是在高级工程师部分基础很牢,进阶到资深(专家)是很容易的。这个级别的知识点不只仅须要对 API 熟练应用,更重要的是对内部的运行机制的深刻理解。
咱们能够发现不少的知识点都是对 Android 系统源码的阅读来获取的,阅读源码是一个很痛苦的过程,也是必须经历的一个过程。
在阅读源码的时候建议多注重对总体流程的把握,而不是深刻细节不能自拔。毕竟咱们主要工做仍是开发 App,阅读源码是为了更好的理解内部运行机制。
专家除了具备扎实的技术深度之外,还有必定的技术广度,以及不错的架构设计能力。除了技术,软技能也是很重要的部分。好比如何管理团队,带带新人,写写 PPT,吹 NB 啥的。
已经达到了资深(专家)的开发者,之后的学习路线跟本身的职业规划有很大关系。这个级别技术也再也不那么重要,毕竟都是专家了,你们都很 NB,怎么还能让人手把手教呢?!
如下方面你们能够参考下:
通常达到资深(专家)的开发者须要 3 - 5 年左右,本科毕业的学生年龄通常在 22 周岁左右,那么达到资深(专家)最快也得 25 周岁了。这里咱们会遇到一个职业上的危机 —— 30 岁危机。
随着年龄的愈来愈大是继续作技术?仍是转型作管理呢?Android 也没啥可研究的了,仍是换其余领域呢?这是一个值得思考的问题,我尚未这个经历(岁数还没到)不敢妄下定论,哈哈。
这里分享下网上的一份关于各大厂 Android 级别的薪资参考图(若有侵权,请联系我删除)。
我看到网上不少消息都说今年互联网寒冬什么什么的,其实每一年都会说寒冬。互联网总共也就发展了十几年,从 2000 年初的诺基亚到如今的智能手机时代,也就十几年的时间。谁有会预料的下一个十年以后会是什么样的呢?
因为前几年大量培训出来的开发者(这里只是说下客观事实,没有贬低的意思),整个市场涌入大量的初级、中级开发者,因此对于新人来讲的确很差找工做了,由于竞争的人多了。
本身没能力就说没能力,怎么你到哪儿,哪都大环境很差,你是破坏大环境的人啊?—— 赵本山
做为开发者咱们最好的准备就是知识的储备,若是咱们努力学习达到了高级甚至更高,目前需求量仍是很大的。目前我了解到的 Android 领域专家级别的工程师也没有多少,你们能够留意统计一下。
关于 Android 进阶的学习指南就已经完结了,欢迎你们继续关注,其余方面的技术分享,及我的感悟。
欢迎你「扫一扫」下面的二维码,关注个人公众号,能够接受最新的文章推送,有丰厚的抽奖活动和福利等着你哦!😍
若是你有什么疑问或者问题,能够 点击这里 提交 issue,也能够发邮件给我 jeanboy@foxmail.com。