【Android14 ShellTransitions】(三)Transition移动为COLLECTING状态

这一节的内容在WMCore中,Transition进入到第二个状态,COLLECTING状态。

我们看到在上一节ActivityStarter.startActivityUnchecked启动Activity的流程中,调用了TransitionController.createAndStartCollecting来创建一个Transition对象:

创建完Transition后,接着调用了TransitionController.moveToCollecting方法:

该方法的主要内容为:

1)、将TransitionController.mCollectingTransition赋值为传参Transition,TransitionController.mCollectingTransition定义为:

代表了处于收集状态的Transition,一般情况下,在没有排队的情况下,TransitionController.mCollectingTransition就是在此方法下被赋值的。

2)、调用Transition.startCollecting方法:

首先将当前Transition的状态标记为STATE_COLLECTING,接着通过BLASTSyncEngine.startSyncSet方法,创建一个SyncGroup,用来收集动画的参与者。

SyncGroup简介

SyncGroup的相关内容我们在以前WindowContainerTransaction系列文章中那篇关于BLASTSyncEngine里其实已经比较细致的讲过了,不过这里还是再看下。

接下来看下BLASTSyncEngine.startSyncSet方法的内容:

其实还是比较清晰的:

1)、调用BLASTSyncEngine.prepareSyncSet来创建一个SyncGroup,这里能看到BLASTSyncEngine是用一个全局的成员变量mNextSyncId通过自增来生成SyncGroup的ID的,因此SyncGroup的ID是逐渐变大的,自然也不会出现重复的情况。

2)、调用BLASTSyncEngine.startSyncSet来将当前SyncGroup添加到成员变量mActiveSyncs中,成员变量mActiveSyncs的定义为:

用来跟踪现在有多少个SyncGroup在同时进行收集的操作。

另外看到BLASTSyncEngine.startSyncSet方法的最后,是将创建的SyncGroup的ID返回,并且赋值给Transition.mSyncId,这样Transition就可以通过传入其ID,来在BLASTSyncEngine中找到与其一一对应的那个SyncGroup了。

SyncGroup,顾名思义,就是一个同步集合,用来保存当前有哪些WindowContainer参与到了动画当中,因此一个关键的成员变量就是一个ArraySet类型的,保存了参与动画的WindowContainer的集合:

这里可以看到Transition走到PENDING状态只是表明,Transition被标记成为了那个唯一的可以收集动画参与者的Transition,但是真正将动画参与者收集进来则是之后的事情了,有可能马上就收集到了动画参与者(比如接下来我们要分析的),也可能后续陆陆续续收集到了多个动画参与者。

相关推荐
恋猫de小郭43 分钟前
React Native 鸿蒙 2026 路线发布,为什么它的适配成本那么高?
android·前端·react native
studyForMokey1 小时前
【Android面试】窗口机制专题
android·面试·职场和发展
用户013201436032 小时前
Android 资源管理与常用布局详解|基础入门
android
陆业聪3 小时前
从 OpenClaw 到 Android:Harness Engineering 是怎么让 Agent 变得可用的
android·人工智能·ai编程
stevenzqzq5 小时前
颜色透明度转换技术文档(Android/Compose)
android
巴黎没有摩天轮Li5 小时前
Android JVMTI 接入流程
android
2501_915909066 小时前
iOS 抓包不越狱,代理抓包 和 数据线直连抓包两种实现方式
android·ios·小程序·https·uni-app·iphone·webview
城东米粉儿6 小时前
Android VCL 和 NAL笔记
android
常利兵6 小时前
从0到1,解锁Android WebView混合开发新姿势
android·华为·harmonyos
背包客(wyq)6 小时前
基于Android手机的语音数据采集系统(语音数据自动上传至电脑端)
android·网络