当前位置: 首页 > article >正文

aosp15 - Activity生命周期切换

本文探查的是,从App冷启动后到MainActivity生命周期切换的系统实现。

在这里插入图片描述

调试步骤

  1. 在com.android.server.wm.RootWindowContainer#attachApplication 方法下断点,为了attach目标进程
  2. 在com.android.server.wm.ActivityTaskSupervisor#realStartActivityLocked 方法下断点,为了进入‘3’
  3. 在com.android.server.wm.ClientLifecycleManager#scheduleTransactionAndLifecycleItems(
    • . android.app.IApplicationThread, // 目标进程: IApplicationThread S t u b Stub StubProxy
    • android.app.servertransaction.ClientTransactionItem, // LauncherActivityItem
    • android.app.servertransaction.ActivityLifecycleItem, boolean) // ResumeActivityItem
  4. 在ActivityThread H H HhandleMessage的EXECUTE_TRANSACTION判断处断点,所有的ClientTransaction都可以从这里查看
    • 可以看到 TopResumedActivityChangeItem,WindowStateResizeItem等ActivityTransactionItem的子类实现
    • 也可看到 LaunchActivityItem ,这是ClientTransactionItem的子类
    • 也可看到 ResumeActivityItem,等生命周期,这些是ActivityLifeCycleItem的子类,ActivityTransactionItem的孙子类
  5. 在android.app.servertransaction.TransactionExecutor#executeLifecycleItem 里下断点,看代码:
// Cycle to the state right before the final requested state. 进入最终状态(比如:resume)前,执行的ClientTransatction(即:start)
cycleToPath(r, lifecycleItem.getTargetState(), true /* excludeLastState */, transaction);

// Execute the final transition with proper parameters. 
lifecycleItem.execute(mTransactionHandler, mPendingActions);
lifecycleItem.postExecute(mTransactionHandler, mPendingActions);
        
  1. android.app.servertransaction.TransactionExecutorHelper#getLifecyclePath
    最终在这里,看到生命周期的转换关系。

ClientTransaction相关类图

/aosp15/frameworks/base/core/java/android/app/servertransaction

在这里插入图片描述

ClienTransaction

注意这两个属性

/**
 * List of transaction items that should be executed in order. Including both
 * {@link ActivityLifecycleItem} and other {@link ClientTransactionItem}.
 * ClientTransaction列表,顺序执行
 */
@Nullable
private List<ClientTransactionItem> mTransactionItems;
/**
 * Final lifecycle state in which the client activity should be after the transaction is executed.
 * activity的最终生命周期状态
 */ 
@Nullable
private ActivityLifecycleItem mLifecycleStateRequest;

http://www.kler.cn/a/447673.html

相关文章:

  • 电脑提示directx错误导致玩不了游戏怎么办?dx出错的解决方法
  • Python爬虫基础——数据清洗
  • Unity中对象池的使用(用一个简单粗暴的例子)
  • 了解Node.js
  • 在 WSL 中使用 Jupyter Notebook 的 TensorBoard 启动问题与解决方法
  • 油猴支持阿里云自动登陆插件
  • Ubuntu安装vue/cil(vue脚手架)
  • 排序算法 (插入,选择,冒泡,希尔,快速,归并,堆排序)
  • 【MAC】深入浅出 Homebrew 下 Nginx 的安装与配置指南
  • 探索 Vue.js 组件开发:从基础到进阶的完整指南
  • 基于单片机的火灾报警器 (论文+源码)
  • 选择排序和冒泡排序;MySQL架构
  • 数字化制造新生态:共话无代码+AI落地实践
  • 调整docker bridge地址冲突,通过bip调整 bridge地址
  • 【Redis】缓存
  • unity 最小后监听键盘输入
  • java中的方法的重载和重写、构造器
  • MySQL基础笔记(三)
  • 鸿蒙开发(16)使用DevEco Studio上的Git工具进行多远程仓管理
  • Redis分片集群学习总结
  • ROS2学习配套C++知识
  • Pika Labs技术浅析(五):商业智能技术
  • 【Linux】ubuntu通过远程命令行启动桌面应用
  • 前端监控之sourcemap精准定位和还原错误源码
  • 队列+宽搜
  • 力扣-图论-70【算法学习day.70】