在 Android 系统中,startActivity 方法是 Android 应用中用于启动另一个 Activity 的关键方法。这个方法最终会触发一系列的
Activity 启动流程,包括 Activity 的创建、配置、显示等。由于 Android 源代码相当庞大且复杂,这里我会提供一个简化的视角来概述
startActivity 的基本流程和源码分析的关键点。
-
调用 startActivity
首先,在 Android 应用中,你通过调用 Context(通常是 Activity 或 Application)的 startActivity(Intent
intent) 方法来启动一个新的 Activity。Intent 对象描述了你想启动的 Activity 以及传递给它的数据。 -
startActivity 在 Activity 中的实现
在 Activity 类中,startActivity 方法实际上是一个封装方法,它最终会调用 Activity 的
startActivityForResult 方法(如果你不需要处理启动的 Activity
返回的结果,则这个方法是合适的)。startActivityForResult 方法是实际执行启动逻辑的地方。 -
startActivityForResult 方法
在 startActivityForResult 方法中,会进行一些前置检查,比如检查调用者 Activity
是否已经处于销毁状态等。然后,它会创建一个新的 ActivityRecord(在 ActivityManagerService 中)来表示即将启动的
Activity,并通过 Binder IPC 机制将这个请求发送给系统服务 ActivityManagerService。 -
ActivityManagerService 处理请求
ActivityManagerService(AMS)是 Android 系统中负责管理所有 Activity 生命周期的服务。当接收到启动
Activity 的请求时,AMS 会进行一系列的检查和配置,包括:
- 检查权限
- 查找或创建目标 Activity 的 ActivityRecord
- 查找或创建目标 Activity 所属的 TaskRecord
- 更新或创建 ActivityStack(用于管理 Activity 的堆栈)
- 发送必要的 Intent 广播(如 ACTIVITY_STARTING)
-
通知 WindowManager 显示 Activity
一旦 Activity 的启动配置完成,AMS 会通知 WindowManager 来准备显示新的 Activity。WindowManager 会负责将
Activity 的视图内容渲染到屏幕上。 -
Activity 的生命周期回调
在 Activity 显示给用户之前,系统会按照 Activity 的生命周期回调方法(如 onCreate(), onStart(),
onResume())来执行相应的初始化工作。