Android开发遇到的坑-----App首次安装,退后台再返回前台时重新显示Splash页面

时间:2021-10-17 17:47:09

1. 问题描述

前段时间测试给我提了个bug, App首次安装,按Home键退后台, 然后点击桌面上的启动按钮(不是从后台程序中进入), 然后会再次显示SplashActvitiy, 欢迎页或引导页

2. 解决过程

最初发现这个问题的时候, 并没有定位到详细的复现步骤, 后面反复测试, 才发现只有在除此安装时出现, 

当时第一反应是出现了crash现象, 但是从log里面, 没有报出任何crash的信息,  于是祭神器, 

https://*.com/questions/19545889/app-restarts-rather-than-resumes

Android开发遇到的坑-----App首次安装,退后台再返回前台时重新显示Splash页面

他的回答的连接(google issue 自行*): https://issuetracker.google.com/issues/36907463

可以看到提出该问题的时间是2009年

Android开发遇到的坑-----App首次安装,退后台再返回前台时重新显示Splash页面

 

然而这个故事一直延续到了2018年.......

Android开发遇到的坑-----App首次安装,退后台再返回前台时重新显示Splash页面

 

3. 解决方案

借助于*那位回答给出的代码, 我测试过, 的确可行的, 主要是根据 isTaskRoot()方法判断是否已经存在于ActivityTaskStack中, 如果已经存在, 那么就将自己结束掉

 if (!isTaskRoot()
            && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
            && getIntent().getAction() != null
            && getIntent().getAction().equals(Intent.ACTION_MAIN)) {

        finish();
        return;
 }

 

4. 简要分析

下图红色部分, 大概意思是说, 应用并不是重新启动了, 只是将这个Activity重新加入到了 Activity Task stack的栈顶, 

如果不将启动页finish, 直接跳转到另一个Activity, 在第二个Activity中点击返回按钮, 那么仍然能够看到这个启动页

Android开发遇到的坑-----App首次安装,退后台再返回前台时重新显示Splash页面

我按照他所说做了一下简单测试, 并使用adb命令查看Activity task stack

adb shell dumpsys activity activities

下图分别是重复问题复现步骤时, 使用那个解决方式的代码前Activity Task stack的信息

如答者所说, 很明显看到, MainActivity在任务栈中出现了两次, 之前那次并没有被销毁, 只是重新将MainActivity加载到了栈顶

Android开发遇到的坑-----App首次安装,退后台再返回前台时重新显示Splash页面

 

下面这幅图是根据isTaskRoot的判断并finish结束自己后的Activity Task stack信息,

能够看到任务栈中, 由于第二次启动时, 判断MainActivity已经位于task root, 然后结束掉自己, 就没有再次出现在栈顶, 所以就没有出现bug效果

Android开发遇到的坑-----App首次安装,退后台再返回前台时重新显示Splash页面

 

5. 总结

关于这个问题, 我觉得已经算是Android系统的问题了, 而且在国内, 并不是所有厂商都会出现上述问题, 例如google issue上有人说华为P8(Android 7.0)修复了这个问题, 由于我没有找到该机型, 所以我并没有验证

Android开发遇到的坑-----App首次安装,退后台再返回前台时重新显示Splash页面

并且, 这个问题的出现时机, 只会在首次安装app时, 要按Home键退后台, 再次点击桌面的启动图标(而不是从后台程序列表), 才会出现, 所以是否要利用上述答案的代码对此问题做修复, 有待商榷, 

具体还是看对app的需求吧

我找了几个身边的朋友(非程序员) 问了一下他们对这个问题的看法(主要是否会因为这个问题而对这个app产生反感), 反正我身边的人都觉得这个问题是个无所谓的事情, 也不是主要功能

 

总体来讲, 只能说Android系统博大精深......, 还要继续学习, 

 

如有错误, 欢迎指出, 感激不尽 ~~!!!