返回
Android系统揭秘(一)-Activity启动流程(下)
Android
2023-11-11 00:16:37
深入理解 Android Activity 启动流程:下半部分
在我们的上一篇博文中,我们揭开了 Android 系统中 Activity 启动流程的神秘面纱,探索了从用户点击图标到 AMS 接管启动请求的整个过程。在本篇博文中,我们将继续深入探讨 Activity 启动流程的下半部分,从 AMS 调度 Activity 到 Activity 创建和启动。
AMS 调度 Activity
AMS 接收到启动请求后,会执行一系列步骤来调度 Activity:
- 权限检查: 首先,AMS 会检查调用进程是否拥有启动目标 Activity 的权限。如果没有,启动将被终止。
- 匹配 Activity 查找: 然后,AMS 会在已安装的应用程序中搜索与启动 Intent 匹配的 Activity。
- 启动模式确定: 接着,AMS 根据目标 Activity 的启动模式来确定启动行为。启动模式有四种:standard、singleTop、singleTask 和 singleInstance。
- Activity 任务栈调度: 接下来,AMS 将 Activity 添加到适当的任务栈中。任务栈是一组堆叠的 Activity,代表用户的任务。
- 进程启动: 如果目标 Activity 的进程尚未运行,AMS 将启动该进程。
Activity 创建和启动
AMS 调度 Activity 后,系统会创建该 Activity 并启动其生命周期:
- Activity 实例创建: AMS 实例化目标 Activity 的类。
- onCreate() 方法调用: Android 系统调用 Activity 的 onCreate() 方法,这是 Activity 生命周期的第一个方法。
- 布局初始化: 在 onCreate() 方法中,Activity 加载其布局文件并初始化其 UI 元素。
- onStart() 方法调用: Activity 的布局初始化完成后,Android 系统调用其 onStart() 方法。
- onResume() 方法调用: 最后,Android 系统调用 Activity 的 onResume() 方法,这是 Activity 可见且可以与用户交互时的生命周期状态。
结论
深入了解 Activity 启动流程,我们可以对 Android 系统如何管理应用程序生命周期和用户交互有一个更深刻的理解。掌握这些知识对于优化应用程序性能和提供流畅的用户体验至关重要。
常见问题解答
-
Activity 的启动模式有哪些不同?
- standard:每次启动都会创建一个新 Activity。
- singleTop:如果 Activity 已在任务栈顶部,则不会创建新 Activity;否则,会创建一个新 Activity。
- singleTask:如果 Activity 已存在于任务栈中,则将其移至顶部;否则,创建一个新 Activity。
- singleInstance:如果 Activity 已存在于系统中,则直接将其移至前台;否则,创建并启动该 Activity。
-
AMS 如何确定目标 Activity 的启动模式?
- AMS 从目标 Activity 的清单文件中读取启动模式。
-
Activity 生命周期有哪些阶段?
- onCreate():创建 Activity。
- onStart():Activity 开始可见。
- onResume():Activity 可与用户交互。
- onPause():Activity 不再与用户交互。
- onStop():Activity 不再可见。
- onDestroy():Activity 被销毁。
-
AMS 为什么要检查权限?
- 为了防止恶意应用程序启动未经授权的 Activity。
-
Activity 的布局是如何初始化的?
- 使用 setContentView() 方法加载布局文件。