在app使用过程中会出现黑屏情况,界面上只有上下控制栏,界面内播放器没有出现,呈现黑屏状态。
机型:红米K20 Pro,荣耀x10,OPPO,三星折叠屏等部分机型必现
225版本无此问题,230版本引入该问题
问题的TAPD单:
http://tapd.oa.com/TencentVideoSubmarine/bugtrace/bugs/view/1020426608094629409
复现路径:
1、在应用商店下载片多多 2、于商店的页面中点击“打开” 3、进入应用后点击登录,跳转到微信后,不登录(此时微信登录界面覆盖在片多多界面上),随后按home键返回桌面 4、点击桌面上的片多多icon进入,即出现黑屏无法播放视频
该问题通过稳定复现路径所dumpsys出的activity的任务栈如下:
从问题栈中可以得出如下结论:
1、HomeActivity在该任务栈内有2个对象实例(相当于是叠在了一起),且来自于不同的UID启动
2、启动了第二个HomeActivity的原因在于,拉起微信登录后,有一个WXFastEntryActivity在HomeActivity上面,且由于HomeActivity的加载模式是SingleTop,导致通过新UID拉起HomeActivity会新建一个。
从这里可以看到,HomeAcitivity产生了2个对象实例,此时按系统导航栏上的返回键,消灭第一个activity,会漏出第二个activity,而第二个activity可以正常使用,结合起来,可以得出:只是新创建的这个activity是黑屏的。
问题1:主feed的设计是应该只有一个,为什么会出现两个?
问题2: 即使是两个HomeActivity,那么又是如何导致黑屏的?
结合代码进一步分析
这个变量是静态,那么当第二个HomeActivity创建时,onWelcomePageClose被回调后,就不会发送初始化feed流的Message(即主feed播放器未初始化),仅显示黑色的背景,也就是黑屏状态。
那么,此问题其实涉及到了两个修改点:
1、如何不重新创建这个HomeActivity,这样就可以避免重新加载HomeActivity
2、isInitPlayerFeeds静态变量要如何修改,避免重新创建HomeActivity的时候不走初始化主feed的流程
针对问题1(主feed的设计是应该只有一个,为什么会出现两个?):
因为225版本无此问题,230版本出现,最快的方式通过排查patch发现,以下代码被注释:
fixHuaWeiLaunchRepeatBug方法就是解决重新创建HomeActivity的方案,所以这个方法重新启用后,该问题得以被解决,体现在体验上不存在黑屏且系统dumpsys的HomeActivity只有一个。
该函数的示意图如下:
再与当时注释的同学确认这么操作的原因在于,这个fixHuaWeiLaunchRepeatBug的调用会引起另外的问题,复现步骤:
1、通过桌面进入片多多
2、点击主动升级弹窗升级
3、下载完成后自动跳转到系统启动器页,一直点击安装
4、安装完成后打开,此时发现应用没有打开
原因就在于系统接口----Activity#isTaskRoot()有细节坑,它返回的是当前Activity是不是在当前任务栈的栈底,而不是应用栈。
该情况的示意图如下:
在安装完成打开HomeActivity的时候,由于这个huawei的安装器huaweiPackageInstaller的Activity与我们的HomeAcitvity属于同一任务栈,导致isTaskRoot返回了false,最终调用了finish方法导致未打开。
那么,针对这个问题,修改的方案是不仅判定是否属于当前任务栈底,也同时判定应用栈的栈底是否已经有HomeActivity对象,如果有了就finish创建流程,如果没有就新建出来。
该情况的示意图如下:
修改方案:
综上,可以解决通过启动器二次创建HomeActivity的问题。
针对问题2(即使是两个HomeActivity,那么又是如何导致黑屏的):
isInitPlayerFeeds静态变量的问题,由闪屏广告引入(引入时间在225版本之前),修改方案可以将其变更为成员变量,这样遇到非启动器二次创建HomeActivity的时候,主feed能够正常走初始化流程而不被被拦截。
该问题是由于未妥善处理fixHuaWeiLaunchRepeatBug方法导致的启动器二次创建,即使修复了isInitPlayerFeeds变量,也会发现,HomeActivity会需要2次back才能退出。
修改问题的时候,需要综合之前的改动通盘考虑后再进行修改,避免问题二次引入
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。