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

相关推荐
她似晚风般温柔7891 小时前
鸿蒙开发深入浅出04(首页数据渲染、搜索、Stack样式堆叠、Grid布局、shadow阴影)
android·鸿蒙·纯血鸿蒙
ShawnRacine2 小时前
Flutter-Android编译报错与解决方案汇总
android·flutter
Python私教2 小时前
Flutter 实现抖音风格底部导航栏
android·开发语言·javascript
数据小爬虫@3 小时前
如何使用爬虫获取淘宝商品详情:API返回值说明与案例指南
android·爬虫
音视频牛哥4 小时前
深度解析SmartGBD助力Android音视频数据接入GB28181平台
android·音视频·大牛直播sdk·gb28181·gb28181平台·gb28181对接·gb28181语音广播
工程师老罗8 小时前
我用Ai学Android Jetpack Compose之Composable与View的区别与联系
android·android jetpack
工程师老罗9 小时前
我用Ai学Android Jetpack Compose之LinearProgressIndicator
android·android jetpack
风浅月明18 小时前
[Android]应用内更新问题
android
当归102418 小时前
接雨水的算法
android·java·算法
猿小帅0120 小时前
androidnetflix手机版遥控器操作
android·framework