【问题分析】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主线程中需要针对这个变化进行一些耗时操作,这影响到第一步的动画的顺利执行。

相关内容

热门资讯

华为安卓4.0系统下载,开启智... 你有没有想过,你的手机系统升级后,是不是也能像超人一样,拥有超能力呢?嘿今天就要给你揭秘一个神奇的事...
指纹支付 安卓系统吗,安卓系统... 你知道吗?现在科技的发展真是让人惊叹不已!尤其是那个指纹支付,简直就像科幻电影里的场景一样,竟然已经...
安卓系统相机拍照技巧,解锁手机... 手机拍照已经成为我们生活中不可或缺的一部分了,尤其是安卓系统的相机功能,强大又实用。但你知道吗?想要...
显卡更新系统和安卓系统,系统优... 你有没有发现,最近你的电脑或者手机好像有点慢吞吞的?别急,这可能是显卡更新系统和安卓系统在默默为你“...
安卓修改系统文件加成,系统文件... 你有没有想过,你的安卓手机其实是个隐藏的超级英雄?它每天都在默默无闻地工作,而你只需要轻轻一改,就能...
便携屏加入安卓系统,开启智能移... 你知道吗?最近科技圈里有个大新闻,那就是便携屏终于加入了安卓系统!这可是个让人兴奋的消息,因为它意味...
安卓系统和mac系统的区别,操... 你有没有想过,为什么有些人偏爱安卓系统,而有些人却对mac系统情有独钟呢?这两种操作系统各有千秋,就...
安卓系统91更新时间,探寻91... 你有没有注意到,你的安卓手机最近是不是有点儿不一样了?没错,就是那个传说中的安卓系统91更新!这次更...
安卓系统好的app,精选APP... 你有没有发现,手机里那些好用到哭的APP?尤其是安卓系统上的那些,简直让人爱不释手!今天,就让我带你...
鸿蒙系统 安卓套皮,安卓套皮下... 你知道吗?最近手机圈子里可是炸开了锅,因为华为的新操作系统鸿蒙系统横空出世,而且听说它和安卓套皮有着...
安卓系统提供内存原理,安卓系统... 你有没有想过,你的安卓手机里那些应用程序是怎么运行的呢?它们又是如何管理内存的呢?今天,就让我带你一...
安卓系统垃圾清除软件,释放手机... 手机里的安卓系统是不是越来越慢了?是不是觉得内存不够用,打开个应用都要等半天?别急,今天就来给你揭秘...
模拟安卓哪个系统好,哪个版本更... 你有没有想过,给安卓手机换一个新系统,就像给它换了个新衣裳,瞬间焕然一新呢?没错,今天咱们就来聊聊这...
安卓系统图片格式,一网打尽 你有没有发现,手机里的图片格式真是五花八门啊!尤其是安卓系统,图片格式种类繁多,让人眼花缭乱。今天,...
搭载安卓原生系统ui,深度解析... 你有没有发现,现在的智能手机越来越像一个小型的电脑了?没错,这就是科技的魅力所在。今天,我要和你聊聊...
安卓pe系统怎么美化,打造个性... 你有没有发现,安卓PE系统虽然轻巧,但默认的界面总感觉有点单调呢?别急,今天就来教你怎么给安卓PE系...
安卓系统必备小说app,必备小... 你有没有发现,手机里装了那么多应用,但总有那么几个是不可或缺的?比如,对于爱看小说的你来说,一款好的...
安卓系统更新哪个好,哪个版本更... 你有没有发现,手机更新系统就像换了个新伙伴,让人心情大好呢!不过,市面上那么多安卓系统更新,哪个才是...
国外安卓定制系统排名,探索个性... 哇,你知道吗?在安卓的世界里,定制系统可是个香饽饽!各大厂商纷纷推出自己的特色系统,让手机体验更加丰...
安卓怎么更换外国系统,轻松更换... 你有没有想过给你的安卓手机换换口味,体验一下外国系统的魅力呢?没错,就是那种界面新颖、功能独特的国外...