[TOC]
### Zygote
#### Zygote 是什么?
Zygote 在 Android 系统中是一个 native 进程,是 Android 系统上所有应用的父进程,我们系统上的 App 都是通过 Zygote 进程 fork 出来的,而 Zygote 进程则是由 Linux 系统用户空间的第一个进程 init 进程通过 fork 的方式创建的。(init 进程是手机开机以后的第一个进程)
#### Zygote 的作用是什么?
1. 启动 system_server 进程
2. 孵化应用进程
#### Zygote 是怎么启动的?
1. init 进程 fork 出 Zygote 进程
2. 启动虚拟机,注册 JNI 函数
3. 加载系统资源,一系列初始化(包括系统资源,openGL,webView等)
4. 启动 system_server 进程
5. 进入 socket 连接的 loop
需要注意的是,Zygote 进程使用的是 socket 通信,还没有使用 Binder 进行通信。
过程大致如下:
![](https://markdown-1258186581.cos.ap-shanghai.myqcloud.com/20200304103823.png)
[Android世界之盘古女娲——Zygote](https://blog.csdn.net/chz429/article/details/87514718?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task)
### system_server
system_server 进程是系统启动以后 Zygote 创建的第一个进程,在其中有很多系统提供的服务,比如 AMS(ActivityManagerService)、WMS(WindowManagerService)、PWS(PackageManagerService)等等。
在 Zygote 内部的 startSystemServer() 中启动 system_server 进程,方法内通过抛出异常,然后捕获异常的技巧,使得 system_server 进程跳过了 Zygote 进程的后续步骤进入 system_server 的 java 世界,这些步骤包括使得Zygote进入无限循环的runSelectLoopMode()方法。
其中 system_server 有个重要的特点是,它支持的使用 Binder 进行进程间通信,它已经进入了 Binder 的世界,不用跟 Zygote 进程一样使用 Socket。
另一个特点是,system_server是和zygote共存亡的,只要system_server被杀死,zygote也会把自己杀掉,这就导致了系统的重启。
### AMS (ActivityManagerService)
AMS 是 Android 中最核心的服务,主要负责系统中四大组件的启动、切换、调度以及应用程序的管理和调度工作,其职责与操作系统中的进程管理和调度模块相类似,因此它在Android中非常重要。
AMS 运行在 system_server 中,所以我们可以通过 Binder 通信来和 system_server 进程进行进程间通信。
### Instrumentation
每个应用程序都有一个 Instrumentation 对象,每个 Activity 持有它的引用,ActivityThread要创建和暂停 Activity 时,都是通过 Instrumentation 实现。
### ActivityStarter
负责处理 Intent 、Flag、选择启动的 Task、复用 Activity 等逻辑
### ActivityRecord
每个 Activity 在 AMS 中都有一个对应的 ActivityRecord,记录 Activity 的信息
### TaskRecord
就是我们所讲的任务栈、先进后出、存储 ActivityRecord
### ActivityStack
用来管理TaskRecord ,ActivityStack 是由 ActivityStackSupervisor 创建的。
[ActivityRecord、TaskRecord、ActivityStack以及Activity启动模式详解](https://www.jianshu.com/p/94816e52cd77)
### ActivityStackSupervisor
AMS 通过 ActivityStackSupervisor 操作 ActivityStack
### ApplicationThread
是 ActivityThread 的一个内部类,继承于 `IApplicationThread.Stub` ,可以看出是一个 Binder 对象,是 AMS 向 ActivityThread 通信的桥梁。
### ActivityThread
表示 App 主线程,有静态 main 入口函数
### ClientLifecycleManager
调用ClientTransaction,让 AMS 切换到 APP 进程执行生命周期
- Java 面试题
- String、StringBuffer、StringBuilder 的区别?
- Java 中的四种引用
- 接口和抽象类的本质区别
- 集合框架
- 集合概述
- ArrayList 源码分析
- LinkedList 源码分析
- HashMap 源码分析
- LinkedHashMap 源码分析
- Android提供的 LruCache 的分析
- LinkedList 和 ArrayList 的区别
- 多线程
- 实现多线程的几种方式
- 线程的几种状态
- Thread 的 start() 和 run() 的区别
- sleep() 、yield() 和 wait() 的区别 ?
- notify() 和 notifyAll() 的区别?
- 保证线程安全的方式有哪几种?
- Synchronized 关键字
- volatile 和 synchronized 的区别?
- 如何正确的终止一个线程?
- ThreadLocal 原理分析
- 线程池
- 多线程的三个特征
- 五种线程池,四种拒绝策略,三种阻塞队列
- 给定三个线程如何顺序执行完以后在主线程拿到执行结果
- Java 内存模型
- 判定可回收对象算法
- equals 与 == 操作符
- 类加载机制
- 类加载简单例子
- 算法
- 时间、空间复杂度
- 冒泡排序
- 快速排序
- 链表反转
- IO
- 泛型
- Kolin 面试题
- Android 面试题
- Handler 线程间通信
- Message、MessageQueue、Looper、Handler 的对象关系
- Handler 使用
- Handler 源码分析
- HandlerThread
- AsyncTask
- IntentService
- 三方框架
- Rxjava
- rxjava 操作符有哪些
- 如何解决 RxJava 内存泄漏
- Rxjava 线程切换原理
- map和 flatmap 的区别
- Databinding引起的 java方法大于 65535 的问题
- Glide
- Glide 的缓存原理
- Glide 是如何和生命周期绑定的?不同的Context 有什么区别?
- Glide 、Picasso 、的区别,优劣势,如何选择?
- Jetpack
- 源码分析
- EventBus
- EventBus 源码分析
- RxBus 替代 EventBus
- OkHttp
- OkHttp 源码分析
- OkHttp 缓存分析
- RxPermission
- RxPermission 源码分析
- Retrofit
- create
- Retrofit 源码分析
- 优化
- 启动优化
- 布局优化
- 绘制优化
- 内存优化
- 屏幕适配
- 组件
- Activity
- Frgment
- Service
- ContentProvider
- BroadcastReceiver
- 进程间通信
- Binder机制和AIDL
- AILD 中的接口和普通的接口有什么区别
- in、out、inout 的区别
- Binder 为什么只需要拷贝一次
- 在android中,请简述jni的调用过程
- 生命周期
- Activity 生命周期
- Fragment 生命周期
- Service 生命周期
- onSaveInstanceState() 与 onRestoreIntanceState()
- 前沿技术
- 组件化
- 模块化
- 插件化
- 热更新
- UI - View
- Android 动画
- 事件分发机制
- WebView
- 系统相关
- 谈谈对 Context 的理解
- Android 版本
- App应用启动流程
- App 的打包
- App 的加固
- App 的安装
- Activity 启动流程
- ClassLoader
- Lru 算法加载 Bitmap 三级缓存原理
- Parcelable 和 Serializable 的区别
- Activity的启动流程
- 相关概念
- 网络相关
- Http
- Https
- Http 和 Https 的区别
- 为什么要进行三次握手和四次挥手?
- OkHttp使用Https访问服务器时信任所有证书
- 设计模式
- 单例模式
- 构建者模式
- 工厂模式
- 外观模式
- 代理模式