【问题分析】SetupWizard退出动画卡住【Android15】
创始人
2024-09-26 14:26:43
0

在这里插入图片描述

1 问题描述

从SetupWizard退出进入Launcher的过程中,SetupWizard的相关界面在退出的动画过程中短暂卡在了某个阶段,如下图所示:

在这里插入图片描述

2 问题分析

2.1 log分析

透过现象看本质,看log此过程中没有冻屏之类的操作,那么出现长时间卡在某个动画阶段,可能是在动画期间,相关SurfaceControl设置setPosition不够流畅导致。

在Transaction.setPosition方法中加log后,先看下正常的情况:

在这里插入图片描述

预期的情况是,setPosition的操作应该尽量在每一帧中都能进行,最终是界面的位置随着时间平滑的变化。

但是出现问题的时候的log为:

在这里插入图片描述

就没有几次设置setPosition的操作,y轴的变化也非常突兀,前几帧还算勉强在每一次Vsync的时候调用Transaction.setPosition为相关SurfaceControl设置了y轴位置,后面则出现了严重的丢帧,导致相关SurfaceControl的y轴位置一直没有得到更新。

再看具体的某一次设置position的堆栈信息:

在这里插入图片描述

能看到:

1)、进程号2023对应的是SystemUI,也就是说这个动画是Transition动画,并且由位于SystemUI的WMShell负责执行。

2)、动画的每一帧位置通过ValueAnimator在每一个Vsync到来的时候计算的得到,至于这个Vsync自然是由Choreographer来接收。

2.2 perfetto分析

再看perfetto的信息:

在这里插入图片描述

执行动画的线程2110收到了几次Vsync后,出现了一段很长的空白期,之后才继续收到了几次Vsync,完成了动画,这一点符合我们观察到的现象以及log的情况。

至于为什么动画线程很长的一段时间都没有收到Vsync,看SystemUI主线程,则是长时间在处理configChanged相关的事务,这阻塞了Choreographer接收到下一个Vsync的时候动画的执行,动画从而出现了卡顿。

所以原因出在SetupWizard的动画还在执行的时候, “com.google.android.setupwizard”和“com.ts.setupwizard.overlay”等一些App执行了一些disable App的操作,触发了全局Configuration的更新,导致SystemUI主线程去处理了configChanged相关的事务导致了阻塞。

2.3 全局Configuration的更新

最后看下为什么全局Configuration发生了更新,对比AndroidU的项目,在退出SetupWizard进入Launcher的时候,是没有发生全局Configuration的更新的。

全局Configuration更新的log为:

在这里插入图片描述

更新的原因为CONFIG_ASSETS_PATHS这一位发生了变化,看下这个差异是如何产生的。

这里直接放结论,起点在OverlayManagerService.mService.setEnabledExclusiveInCategory:

在这里插入图片描述

这里传入的packageName为“com.android.internal.systemui.navbar.gestural”,这个值定义在WindowManagerPolicyConstants中:

在这里插入图片描述

应该是给App用的,看起来是和导航模式中的手势相关的。

后续的调用堆栈为:

OverlayManagerService.mService.setEnabledExclusiveInCategory

-> OverlaytManagerService.updateTargetPackagesLocked

-> OverlaytManagerService.updateActivityManager  	-> ActivityManager.scheduleApplicationInfoChanged  		-> ActivityManagerService.scheduleApplicationInfoChanged  			-> ActivityManagerService.updateApplicationInfoLOSP  				-> ProcessList.updateApplicationInfoLOSP  					-> ActivityTaskManagerService.updateAssetConfiguration 

最终是在ActivityTaskManagerService.updateAssetConfiguration中:

在这里插入图片描述

首先调用ActivityTaskManagerService.increaseAssetConfigurationSeq中对Configuration.assetSeq进行了自增:

在这里插入图片描述

然后再调用ActivityTaskManagerService.updateConfiguration对全局Configuration进行了更新。

2.4 根本原因

经过第3步的分析,看到是那次OverlayManagerService.mService.setEnabledExclusiveInCategory的调用造成了全局Configuration的更新,然后我本地屏蔽了这次调用,果然不会有“config changes”相关的log打印了, 并且看手机的现象也正常,没有卡顿的现象发生了,但是本来进入Launcher的时候是手势导航模式的,因为我屏蔽了那次调用后也变成了3按钮导航的模式,所以OverlayManagerService.mService.setEnabledExclusiveInCategory的调用是SystemUI那边为了将导航模式从3按钮模式切换为手势模式。

所以这个问题发生的根本原因是,在SetupWizard退出进入Launcher的时候:

1)、首先是SetupWizard要执行退出动画,这个动画由位于SystemUI的WMShell执行,具体为在SystemUI的主线程中当Choreographer接收到Vsync信号后在animation阶段执行动画。

2)、SystemUI将导航模式从3按钮切换为了手势,这导致了全局Configuration的更新,SystemUI主线程中需要针对这个变化进行一些耗时操作,这影响到第一步的动画的顺利执行。

相关内容

热门资讯

海事综合服务系统安卓,便捷航运... 你有没有想过,出海航行的时候,那些忙碌的船员们是如何轻松搞定各种繁琐的海事手续的呢?嘿这都得归功于一...
安卓系统优势在哪找到,开放生态... 你有没有发现,现在手机的世界里,安卓系统就像是个超级明星,无处不在,魅力四射!那么,这个安卓系统到底...
安卓系统如何关闭分身,轻松释放... 亲爱的手机控们,你们是不是也和我一样,对手机里的分身功能爱恨交加呢?一边享受着两个账号同时登录的便利...
修改安卓系统的工具,安卓系统工... 亲爱的手机控们,你是否曾想过给你的安卓手机来个“大变身”?别急,今天我要给你揭秘那些神奇的修改安卓系...
安卓系统钱箱怎么设置,轻松创建... 你有没有想过,你的安卓系统钱箱是怎么设置的?是不是每次看到它,都感觉有点神秘呢?别急,今天就来给你揭...
安卓系统虚拟windows系统... 亲爱的电脑迷们,你们有没有想过,在Windows系统上直接运行安卓手机应用?想象你坐在电脑前,一边处...
安卓手机玩鸿蒙系统,体验鸿蒙系... 你有没有想过,你的安卓手机能不能玩鸿蒙系统呢?这可不是个简单的问题,里面可是藏着不少门道呢!今天,我...
安卓系统平板电脑续航,续航能力... 你有没有想过,为什么有时候拿着平板电脑,还没刷几条朋友圈,电量就“嗖”的一下子见底了呢?别急,今天就...
360安卓系统软件,全方位安全... 你有没有发现,手机里的那些小玩意儿,就像是你的贴身小助手,帮你解决各种小麻烦?今天,咱们就来聊聊36...
安卓机什么系统最好,安全稳定的... 你有没有想过,安卓机什么系统最好呢?这可是个让人纠结的问题,就像吃火锅是吃麻辣还是清汤一样,各有各的...
小米9安卓升级系统,体验流畅新... 你有没有发现,你的小米9最近是不是有点儿“慢吞吞”的?别急,别急,让我来给你支个招儿,让你的小9重新...
安卓系统有没有app,基于安卓... 你有没有想过,你的安卓手机里有没有那些特别酷炫的app呢?今天,我就要给你好好盘点让你的手机瞬间变身...
安卓12系统卡吗,性能提升与卡... 亲爱的手机控们,你是不是也遇到过这样的烦恼:手机里正玩得high,突然间,安卓12的小家伙就卡壳了,...
安卓15系统更新内容,性能飞跃... 哇塞,你有没有听说?安卓15系统更新啦!这次更新可是满满的惊喜,让我带你一起探索一下这个全新的系统吧...
安卓软件系统签名限制,数字签名... 你有没有遇到过这种情况?辛辛苦苦开发了一个安卓APP,结果一上传到应用市场,就被误报成病毒了!这可真...
安卓多系统教程没用,安卓多系统... 你有没有遇到过这种情况?满心欢喜地想要学习安卓多系统,结果一看教程,哎哟,怎么这么复杂,还都是一些没...
安卓系统怎么连接键盘,蓝牙与U... 你是不是也和我一样,对手机屏幕上的小键盘有点儿审美疲劳了呢?想要换一个更舒适、更高效的键盘来输入文字...
x431安卓系统,智能诊断新时... 你有没有想过,你的手机里竟然能藏着一个强大的汽车医生?没错,就是那个x431安卓系统!今天,就让我带...
安卓系统要装几个,副标题智能推... 你有没有想过,你的安卓手机里到底装了多少个应用程序呢?是不是有时候觉得手机越来越卡,其实是因为你装了...
华为手机也是安卓系统,引领智能... 你有没有想过,那些在我们手中滑动自如的华为手机,其实也是安卓家族的一员呢?没错,华为手机也是安卓系统...