startActivity 流程

在 Android 系统中,startActivity 方法是 Android 应用中用于启动另一个 Activity 的关键方法。这个方法最终会触发一系列的
Activity 启动流程,包括 Activity 的创建、配置、显示等。由于 Android 源代码相当庞大且复杂,这里我会提供一个简化的视角来概述
startActivity 的基本流程和源码分析的关键点。

  1. 调用 startActivity
    首先,在 Android 应用中,你通过调用 Context(通常是 Activity 或 Application)的 startActivity(Intent
    intent) 方法来启动一个新的 Activity。Intent 对象描述了你想启动的 Activity 以及传递给它的数据。

  2. startActivity 在 Activity 中的实现
    在 Activity 类中,startActivity 方法实际上是一个封装方法,它最终会调用 Activity 的
    startActivityForResult 方法(如果你不需要处理启动的 Activity
    返回的结果,则这个方法是合适的)。startActivityForResult 方法是实际执行启动逻辑的地方。

  3. startActivityForResult 方法
    在 startActivityForResult 方法中,会进行一些前置检查,比如检查调用者 Activity
    是否已经处于销毁状态等。然后,它会创建一个新的 ActivityRecord(在 ActivityManagerService 中)来表示即将启动的
    Activity,并通过 Binder IPC 机制将这个请求发送给系统服务 ActivityManagerService。

  4. ActivityManagerService 处理请求
    ActivityManagerService(AMS)是 Android 系统中负责管理所有 Activity 生命周期的服务。当接收到启动
    Activity 的请求时,AMS 会进行一系列的检查和配置,包括:

  • 检查权限
  • 查找或创建目标 Activity 的 ActivityRecord
  • 查找或创建目标 Activity 所属的 TaskRecord
  • 更新或创建 ActivityStack(用于管理 Activity 的堆栈)
  • 发送必要的 Intent 广播(如 ACTIVITY_STARTING)
  1. 通知 WindowManager 显示 Activity
    一旦 Activity 的启动配置完成,AMS 会通知 WindowManager 来准备显示新的 Activity。WindowManager 会负责将
    Activity 的视图内容渲染到屏幕上。

  2. Activity 的生命周期回调
    在 Activity 显示给用户之前,系统会按照 Activity 的生命周期回调方法(如 onCreate(), onStart(),
    onResume())来执行相应的初始化工作。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值