现象

  今天工作中,在对公司产品进行测试的时候,程序员小哥点出了一个问题。问题点出的步骤是这样的:

  1.安装APP

  2.点击打开

  3.经过闪屏页,进入主页后,点击HOME键

  4.再次进入程序会重新进入闪屏页,不过经过闪屏页后会停留在HOME前所在的页面

原理分析

  从此我们可以知道QQ安装器其实也就是使用Intent来启动其刚刚安装的那个App,但是问题所在的是:他们的启动Intent并没有跟桌面的启动Intent完全一致!

我们将桌面的Task记为【TaskL】,QQ安装器的Task记为【TaskQ】,我们应用的Task记为【TaskA】,那么分析如下:

  进入桌面: L1 ---- L1是单纯的桌面

  打开QQ: L1Q1Q2 ---- Q2是安装完毕后询问是否启动对应程序的Activity

  点击打开: L1Q1Q2A1A2 ---- A1是入口闪屏页,A2是主页Activity

  返回桌面: Q1Q2A1A2L1 ---- 回到桌面页,也就是L1前置

  点击A的图标: Q1Q2L1A1A2A1 ---- 找到【TaskA】,挪到前台,由于比对Intent并不是完全一致,所以该请求是新启动Activity,那么把A1添加到对应的【TaskA】中

  所以bug出现了,出现了再一次的闪屏页【A1】,问题定位成功!

  PS:这里我稍微变种一下,因为一般我们闪屏页都是在启动主页后finish的,而主页一般是singleTask模式

  打开QQ: L1Q1Q2 ---- Q2是安装完毕后询问是否启动对应程序的Activity

  点击打开: L1Q1Q2A2 ---- A1是入口闪屏页,A2是主页Activity,启动后A1业务逻辑应该finish掉,所以从【TaskA】中挪去

  返回桌面: Q1Q2A2L1 ---- 回到桌面页,也就是L1前置

  点击A的图标: Q1Q2L1A2A1 -> Q1Q2L1A2A1 ---- 找到【TaskA】,挪到前台,由于比对Intent并不是完全一致,所以该请求是新启动Activity,那么把A1添加到对应的【TaskA】中,然后A1所再一次触发启动主页,但是主页是 singleTask模式,所以又回到了上次对应的A2主页,所以现象为再一次出现闪屏页,然后回到原先的主页界面。

解决思路

  自身业务代码规避,我们可以知道,如果是多余的闪屏页入口Activity的话,其基本不可能位于Task的根部,而如果正常启动的话,闪屏页入口Activity必定在多对应的Task的根部位置,那么我们可以从这个地方对于这个bug进行规避,方法就是在闪屏页入口Activity的onCreate代码加入如下一段代码:

// 避免从桌面启动程序后,会重新实例化入口类的activity
if (!this.isTaskRoot()) {
Intent intent = getIntent();
if (intent != null) {
String action = intent.getAction();
if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)) {
finish();
return;
}
}
}

  

关于APP在小米5s第一次安装启动后,点击home返回桌面,再次进入重进闪屏页问题相关推荐

  1. 关于APP在小米5s第一次安装启动后,点击home返回桌面,再次进入重进闪屏页问题...

    现象 今天工作中,在对公司产品进行测试的时候,程序员小哥点出了一个问题.问题点出的步骤是这样的: 1.安装APP 2.点击打开 3.经过闪屏页,进入主页后,点击HOME键 4.再次进入程序会重新进入闪 ...

  2. 小米5s Plus安装类原生系统

    小米5s Plus安装原生系统 手机型号:MI 5s Plus    codeName:natrium 第一步:先解锁手机 登录网站http://www.miui.com/unlock/index.h ...

  3. Android Studio 第一次安装启动Failed to resolve报错解决方案

    笔者近期准备着手做一个有关安卓的项目,兴冲冲地找来Android学习书籍,并下载安装了Android Studio.可是在Android Studio的第一次运行就遇到了很大的问题,各种莫名其妙的报错 ...

  4. Android Bug分析系列:第三方平台安装app启动后,home键回到桌面后点击app启动时会再次启动入口类bug的原因剖析...

    前言 前些天,测试MM发现了一个比较奇怪的bug. 具体表现是: 1.将app包通过电脑QQ传送到手机QQ上面,点击安装,安装后选择打开app (此间的应用逻辑应该是要触发 [闪屏页Activity] ...

  5. Docker 安装启动后无法连接服务器

    Docker 安装启动后服务无法连接: 原因:docker0 ip 与 系统ip冲突 # 查看ip ifconfig 解决方法重新绑定docker0 ip(docker0 不能设置为localhost ...

  6. Flutter——踩坑之旅(iOS闪屏页+启动页 闪屏之后会黑一下才进入启动页)

    程序猿日常 flutter填坑--iOS闪屏页+启动页效果优化 闪屏之后会黑一下进入启动页 问题描述 大部分app都有自己的启动页,我们经常在启动页做一些判断逻辑,例如 是否第一次启动app,第一次启 ...

  7. 【Android】android开发之splash闪屏页的四种实现方式,启动页的实现教程。

    2019独角兽企业重金招聘Python工程师标准>>> 作者:程序员小冰,GitHub主页: https://github.com/QQ986945193 新浪微博:http://w ...

  8. uniapp 引导页 启动页 闪屏页功能介绍及部分功能实现

    启动页设置 uniapp自带的启动页是一个白底的页面,上面有个uni的logo,然后周围有个圆圈的进度条,这个是启动页. uniapp中可以自定义启动页,注意两点: 不要勾选"启动界面显示等 ...

  9. Flutter 项目在iPhone/苹果手机启动页/闪屏页黑屏问题

    问题很奇怪 不清楚什么原因,有知道的朋友求告知,设置如图一所示的 storyboard 布局文件,就会显示1-2s的黑屏,去掉就可以了,那在 xcode 里面怎么设置开屏页呢,需要在 Info.lis ...

最新文章

  1. 读《大道至简》第六章感想
  2. [Treap]JZOJ 4737 金色丝线将瞬间一分为二
  3. (转)javascript 杂谈之哪种写法你更喜欢?
  4. 简单DP (Preparing for Xtreme 12.0) | STL map使用
  5. java语言 编译原理_【Java学习】深入分析Java的编译原理
  6. spi四种工作模式时序图_还没学会SPI总线协议?干货都在这里
  7. 递归函数两种方式的区别
  8. 如何下载股票历史数据?
  9. 小马哥讲Spring核心编程思想 第十周 Spring资源管理
  10. ARMv8-A编程指导之Caches(1)
  11. 无需Apple ID和密码即可将iPad恢复出厂设置的简便方法
  12. GB2312编码范围
  13. 联想拯救者突然连不上网怎么办
  14. 【PCB Layout】信号抗干扰经验总结
  15. 如何在Linux系统下的IntelliJ IDEA 2018.3.5下载与安装以及激活教程
  16. 计算机所有以太网适配的ip,演示win10电脑以太网没有有效的ip配置
  17. 【数据结构】之图的遍历(C语言)
  18. 区块链测试(一):测试人员初学区块链
  19. roboware-studio在ubuntu18.04出现像素干扰点解决
  20. PM-127 网关的应用

热门文章

  1. 项目介绍,项目架构和微服务划分
  2. 23种设计模式(第二章创建者模式5种)
  3. js+css3简易实现2023新年快乐全屏满天星动画特效
  4. 利用 CRISPR 基因编辑技术,人类正在做七件“疯狂”的事
  5. 霜狼老师TA学习笔记 - 渲染流程(光栅化阶段、逐片元操作)
  6. 服务器主板能插几块硬盘,请问一块主板上可以插多少个硬盘?
  7. 一探究竟:安信可模组ESP32-SU、ESP32-SL和ESP32-S对比,区别在哪里?
  8. 底层用python、前台用什么_底的解释|底的意思|汉典“底”字的基本解释
  9. 移动端和PC端的录屏软件汇总,需要的朋友速看
  10. 2017“南京周·纽约站”盛大开幕,火柴全景VR骑行游南京大获好评