【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,但是真正将动画参与者收集进来则是之后的事情了,有可能马上就收集到了动画参与者(比如接下来我们要分析的),也可能后续陆陆续续收集到了多个动画参与者。

相关推荐
程序员陆业聪7 小时前
绕过Frida/Xposed的最后防线:SVC直接系统调用与Native反Hook实战
android
程序员陆业聪7 小时前
WebView与原生JS交互:JSBridge生产级实现与安全防护
android
我命由我1234510 小时前
Android 开发问题:MlKitException: An internal error occurred during initialization.
android·java·java-ee·android jetpack·android-studio·androidx·android runtime
Meteors.11 小时前
Android自定义 View 三核心方法详解
android
2501_9160074711 小时前
前端开发常用软件与工具全面指南
android·ios·小程序·https·uni-app·iphone·webview
赏金术士11 小时前
Android Tinker 热修复集成与使用指南 1.9.15.2
android·热修复·tinker
2603_9541383912 小时前
安卓误删文件先别慌!5个实用小技巧指南教你补救
android·智能手机
波诺波14 小时前
5-SOFA可变形的3D物体 5-elasticity.scn
android
2501_9159090615 小时前
iOS应用性能优化:十大策略提升用户体验与开发效率
android·ios·小程序·https·uni-app·iphone·webview
sun00770016 小时前
打通android全链路,网卡驱动, 内核 , 到上层hal, framework
android