Kernel
-
Kernel层是指Android内核层,到这里才刚刚开始进入Android系统
-
启动Kernel的swapper进程(pid=0):初始化进程管理、内存管理相关工作。
-
启动kthreadd进程(pid=2):是Linux系统的内核进程,会创建内核工作线程kworkder,软中断线程ksoftirqd,thermal等内核守护进程。
Native
-
启动init进程(pid=1),是Linux系统的用户进程, init进程是android系统中用户空间的第一个进程
-
init进程会fork ueventd、logd、healthd、installd、adbd、lmkd等用户守护进程
-
init进程还开启servicemanager(binder管家)、bootanim(开机动画)等服务
-
init进程fork出Zygote进程,Zygote进程是Android系统的第一个Java进程,Zygote是所有Java进程的父进程
Framework
-
Zygote进程启动后,加载ZygoteInit类,注册Zygote Socket服务端套接字;加载虚拟机;加载类,加载系统资源
-
System Server进程,是由Zygote进程fork而来,System Server是Zygote孵化的第一个进程,System Server负责启动和管理整个Java framework,包含AMS,PMS,WMS等80多个服务
Application
-
Zygote进程fork出的第一个App进程是Launcher,即手机桌面APP。
-
所有APP进程都是由zygote进程fork出来的
那么,为什么Zygote通信fork进程,使用的是socket,而不是Android的Binder?为什么是从zygote进程fork App,而不是其他进程?等等这类问题却在大厂面试中经常问到。同时,AMS(ActivityManagerService)是Android系统中一个特别重要的系统服务,也是与上层APP打交道最多的系统服务之一(几乎所有的APP应用都需要与AMS打交道)。AMS与操作系统中的进程管理和调度模块很像,除了在Android系统中非常重要之外,它涉及到的知识点也非常多。**想要了解Android的内部工作机制,就必须先了解AMS的工作原理。**AMS贯穿了Android系统组件的核心服务,主要负责Android系统中四大组件的启动、切换、调度以及应用进程管理和调度工作。
比如在Activity的启动流程中,AMS就是组件管理调度中心,什么都不干,但什么都管!**Android系统从开机到桌面,再到APP启动的完整流程,AMS无所不在……**当我们深刻了解Android启动流程与AMS特性之后,就可以解决项目开发中的很多问题,比如:屏幕适配、自定义View和ViewGroup、APK加固、热修复、组件化路由、皮肤换肤、插件化、leakCanary内存问题分析、Hilt注入、Jetpack原理、Glide原理、RXJava原理、launchModel、权限验证、四大组件等相关逻辑和代码……**但AMS本身比较复杂、难以理解,许多工作多年的Android开发者也很难弄清AMS的作用。**不少开发者也只是有了解到一些入门级的概念,比如:
-
init进程是android系统中用户空间的第一个进程
-
Zygote进程由init进程孵化而来。同时init进程会孵化出ServiceManager(Binder 相关)
-
Zygote进程是Android系统的第一个Java进程(即虚拟机进程),Zygote是所有Java进程的父进程
-
System Server是由Zygote fork而来。(Android中最重要的两个进程 Zygote,SystemServer)
-
我们的AMS,PMS,WMS都是SystemServer进程中的一个线程
-
Launcher进程是我们App的第一个进程。(桌面)
当然大多数开发者更多的还是在做业务开发,对于Framework基本停留在“不够了解”的阶段,其中不乏一些工作多年的 Android 工程师。
如果想要精进,不仅要对底层原理充分了解,还要知道如何利用Framework知识指导我们代码实践开发,像Android App 的启动机制、AMS、PMS、WMS、Handler、Binder等…这样才能够真正说得上是精通Framwork。精通意味着:
-
首先在大厂面试环节,Framework是必问项,你可以展示出个人实力;
-
一旦你进入大厂,对Framework了解越多,你能够做的事情就越多,产出也会越多,而且可以持续不断的去做。
作为过来人,我发现很多学习者和实践者都在 Android Framework上面临着很多的困扰,比如:
- 工作场景中遇到难题,往往只能靠盲猜和感觉,用临时性的补救措施去掩盖,看似解决了问题,但下次同样的问题又会发作,原因则是缺乏方法论、思路的指引以及工具支持;
总结
其实要轻松掌握很简单,要点就两个:
- 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
- 多练。 (视频优势是互动感强,容易集中注意力)
你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。下面资料部分截图是我花费几个月时间整理的,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
。**
[外链图片转存中…(img-2z46Zct3-1714966632684)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!