- 前言
- 一、ClientTransactionHandler.scheduleTransaction
- 二、ActivityThread.H 处理 EXECUTE_TRANSACTION 消息
- 三、TransactionExecutor execute -> executeCallbacks 方法
- 四、LaunchActivityItem.execute
- 总结
上一篇博客 【Android 启动过程】Activity 启动源码分析 ( AMS -> ActivityThread、AMS 线程阶段 二 ) 分析到 , 在 AMS 进程通过 Binder 机制调用 ActivityThread 中的 ApplicationThread 内部类中 scheduleTransaction
方法 ;
在该方法中 , 发送了 ActivityThread.H.EXECUTE_TRANSACTION
159
159
159 消息 , 由 ActivityThread 中的内部类 H 处理该消息 ;
从 Binder 调用 ActivityThread 开始 , 就进入了主线程阶段开始执行 , 这里开始在主线程中创建 Activity , 并启动该 Activity ;
一、ClientTransactionHandler.scheduleTransaction在 ClientTransactionHandler.scheduleTransaction
方法中 , 发送了
159
159
159 消息 , 并且将参数 ClientTransaction transaction
传递给了 ActivityThread.H
;
/**
* 定义{@link android.app.servertransaction.ClientTransaction}或其项可以在客户端上执行的操作。
* @hide
*/
public abstract class ClientTransactionHandler {
// 安排与阶段相关的逻辑和处理程序。
/** 准备并安排事物执行。 */
void scheduleTransaction(ClientTransaction transaction) {
transaction.preExecute(this);
sendMessage(ActivityThread.H.EXECUTE_TRANSACTION, transaction);
}
}
完整代码参考 /frameworks/base/core/java/android/app/ClientTransactionHandler.java ;
二、ActivityThread.H 处理 EXECUTE_TRANSACTION 消息在 ActivityThread 的 H 内部类中 , 处理 int EXECUTE_TRANSACTION = 159
消息时 , 获取传入的 ClientTransaction transaction
对象 , 并执行该事务 mTransactionExecutor.execute(transaction)
;
mTransactionExecutor
是 ActivityThread 成员变量 , 是执行多步骤事务的执行者 ;
/**
* 它管理应用程序进程中主线程的执行、调度和执行活动、广播以及活动管理器请求的其他操作。
*
* {@hide}
*/
public final class ActivityThread extends ClientTransactionHandler {
// 执行多步骤事务的执行者。
private final TransactionExecutor mTransactionExecutor = new TransactionExecutor(this);
class H extends Handler {
public static final int EXECUTE_TRANSACTION = 159;
public void handleMessage(Message msg) {
if (DEBUG_MESSAGES) Slog.v(TAG, ">>> handling: " + codeToString(msg.what));
switch (msg.what) {
case EXECUTE_TRANSACTION:
// ActivityThread 调用 scheduleTransaction 方法发送 159 消息时
// 将 transaction 传递到了 H 中
// 此处获取该 transaction
final ClientTransaction transaction = (ClientTransaction) msg.obj;
// 执行 transaction 相关信息
mTransactionExecutor.execute(transaction);
if (isSystem()) {
// 系统进程内的客户端事务在客户端而不是ClientLifecycleManager上循环,
// 以避免在处理此消息之前被清除。
transaction.recycle();
}
// TODO(lifecycler): 回收本地计划的事务。
break;
}
Object obj = msg.obj;
if (obj instanceof SomeArgs) {
((SomeArgs) obj).recycle();
}
if (DEBUG_MESSAGES) Slog.v(TAG, "
关注
打赏
- 【Android Gradle 插件】Gradle 自定义 Plugin 插件 ③ ( 自定义插件作用 | Android Gradle 插件的扩展 | 自定义 Extension 扩展 )
- 【Android Gradle 插件】Gradle 构建生命周期 ③ ( BuildListener 构建监听器 | TaskExecutionGraphListener 任务执行图监听器 )
- 【Android Gradle 插件】Gradle 构建生命周期 ② ( Gradle 类的添加构建生命周期监听器函数 | Gradle#addListener 函数 )
- 【Android Gradle 插件】Gradle 构建生命周期 ① ( 分析构建脚本 | 执行初始化配置 | 执行 Gradle 任务 | Project#beforeEvaluate 函数 )
- 【Android Gradle 插件】自定义 Gradle 任务 ⑨ ( 控制 Gradle 执行任务顺序 | Task#finalizedBy 函数 | 控制 Gradle 执行任务顺序示例分析 )
- 【Android Gradle 插件】自定义 Gradle 任务 ⑧ ( 控制 Gradle 执行任务顺序 | Task#shouldRunAfter 函数 | 三个函数使用场景对比 )
- 【Android Gradle 插件】自定义 Gradle 任务 ⑦ ( 控制 Gradle 执行任务顺序 | Task#dependsOn 函数 | Task#mustRunAfter 函数 )
- 【数学分析】集合 ① ( 集合概念 | 集合表示 | 常用的数集合 | 集合的表示 )
- 【数学分析】学科简介 ( 初等数学缺陷 | 微分与积分 | 学习数学分析的目的 | 数学分析与高等数学对比 )
- 【Android Gradle 插件】自定义 Gradle 任务 ③ ( Gradle 自定义任务创建方法 Project#task 函数 | Task#doFirst 函数用法 )