前言:
上一章中我们从代码中找到了activity的入口。这一章我们暂不着急进入代码细节,先从整体的框架流程上理解Activity的启动过程,然后再深入代码细节一起梳理。
目录
[一 Activity的启动入口(基于安卓8.0)]
(https://www.jianshu.com/p/0d293822c814)
2.1 五大过程
2.1.1 先看一张时序图
Activity启动的五大过程.png2.1.2 理解这张图
-
四个进程
- Launcher 进程
- AMS 进程 , AMS全称是ActivityManagerService,它所在的进程是system_server进程。
- Zygote进程
- 被启动的应用进程
可以看到图中四个独立的进程间有互相通信的过程,所以理解Android的跨进程通信机制是理解Activity启动过程的一个关键。
-
如何记住5个过程
把手机想象成提供多种服务的公司
Launcher进程想象成一个公司前台
AMS 想象成公司的服务管理部门
Zytoge想象成公司总裁
应用进程想象成提供服务的公司员工。
我们以用户打开相机拍照为例来描述这个过程。
用户访问公司,首先看到的是公司前台,然后看到有拍照的服务。
用户对前台说,我需要拍照服务。 (相当于用户点了下launcher的相机图标)
- 前台对管理部门说,帮我把拍照服务叫到前面来服务用户
- 管理部门收到了这个消息,然后预先做了几件事情
- 检查这个用户有没有权限享受拍照服务
- 检查在当前登记的服务类型中有没有拍照服务
以上两项检查通过后,接下来检查负责提供拍照服务的人在不在
如果拍照的人在,则把拍照的人调到前台来,给用户提供服务。
- 如果拍照的人不在,则通知总裁,把提供拍照服务的人喊回来(开启拍照进程)
- 拍照的人准备好了后,告诉管理部门说,我已经准备好了。
- 管理部门收到通知后,立刻把拍照的人调到前台来说,赶紧的吧,给用户提供拍照服务。
此时和用户打交道的就是拍照的人了。
整个开启Activity的过程也就结束了。 用这个故事来说明是不是更容易理解一些呢?
2.2 关键的类
packages/apps/Launcher3/src/com/android/launcher3/
- Launcher.java
frameworks/base/core/java/android/app/
- Activity.java
- Instrumentation.java
- ActivityManager.java
- IActivityManager.aidl
- ActivityThread.java
- ApplicationThread.java
- H.java
- IApplicationThread.aidl
frameworks/base/services/core/java/com/android/server/am/
- ActivityManagerService.java
- ActivityStarter.java
- ActivityStackSupervisor.java
- ActivityStack.java
- ActivityRecord.java
- ProcessRecord.java
Instrumentation:字面意思“仪器”。官方解释:用于实现应用程序检测代码的基类。 当开启仪器运行时,该类将在任何应用程序代码之前为您实例化,从而允许您监视系统与应用程序之间的所有交互。Instrumentation实现通过AndroidManifest.xml向系统描述。
ActivityManager:此类提供有关活动,服务和包含过程的信息和交互。
IActivityManager:用于与ActivityManagerService交谈的系统专用API。 提供了从应用程序返回到活动管理器的调用。
ActivityThread:管理应用程序进程中主线程的执行,根据ActivityManager请求调度和执行Activitys、broadcasts和其他操作。
ApplicationThread:ActivityThread内部类,IApplicationThread.aidl的具体实现,提供给ActivityManager,ActivityManager通过它告知应用程序将要做的事。
H:继承Handler,ActivityThread内部类,是应用程序进程中主线程的消息管理类。
ActivityManagerService:负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作。
ActivityStarter:用于解释如何启动活动的控制器。此类收集用于确定如何将意图和标志转变为活动以及相关任务和堆栈的所有逻辑。
ActivityStack: 单个活动栈的状态和管理。
ActivityStackSupervisor:Activity栈管理。
网友评论