ADeveloperH Blog

Meet a better self !

Android 周边技术分享


Home键后重启仍然启动SplashActivity问题

1 问题描述

首次安装APP后从SplashActivity页面进入MainActivity(进入时SplashActivity已经finish),然后按home键,再点击图标打开APP的时候发现APP重新从SplashActivity进入MainActivity,并不是跳转到点击home键之前的MainActivity页面。这个问题只会在安装成功后出现,安装后杀掉进程,再次重复操作没有问题。(部分手机通过adb安装没有问题,但是直接安装apk后首次进入都会出现上述问题)

2 问题原因

参考资料:

  • 1 https://www.atlassc.net/?p=479
  • 2 https://stackoverflow.com/questions/6337217/how-to-return-to-the-latest-launched-activity-when-re-launching-application-afte
  • 3 https://stackoverflow.com/questions/6356467/activity-stack-ordering-problem-when-launching-application-from-android-app-inst
  • 4 https://flowercat.iteye.com/blog/380859
  • 5 https://blog.csdn.net/nupt123456789/article/details/34415849
  • 6 http://www.echojb.com/android/2016/08/08/37513.html

补充说明:

  • 在1中提到的核心思想—>
  • 我们需要判断:该意图是打开一个新的任务,还是将后台的应用给提到前台来.
  • 若是要将应用提到前台来直接将这个Activity结束掉,然后显示出来的Activity就是之前被最小化的Activity.
  • 因为点击图标的意图会将新启动的Activity置于顶端,而顶端的下面的Activity就是之前被最小化的Activity.
  • 此时结束掉新启动的Activity,就可以让之前被最小化的Activity 显示出来了.

3 解决方案

最初猜测SplashActivity和MainActivity不在一个栈中,可以通过adb命令查看当前栈的情况:

adb shell “dumpsys activity grep 包名”

查找资料后解决方案如下:

  1. 方案一:

SplashActivity的onCreate方法中添加如下代码:

if (!isTaskRoot()) { 
	finish(); 
	return; 
}
  1. 方案二:

SplashActivity的onCreate方法中添加如下代码:

if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
   finish();
   return;
}
  1. 方案三

SplashActivity的manifest中配置如下属性:

android:alwaysRetainTaskState="true"
android:clearTaskOnLaunch="false" 
最近的文章

JNI开发(一)

参考资料Android Studio中NDK开发傻瓜教程(JNI)Android JNI NDK C++ so本地验证 获取应用签名通过JNI实现验证App签名获取公钥Android下玩JNI的新老三种姿势System.load 和 System.loadLibrary详解1 配置环境首先需要下载ndk,在AndroidStudio中如下图然后在项目中配置ndk的路径,如下图:2 使用步骤2.1 修改项目下gradle.properties文件添加如下命令:android.useDepre...…

继续阅读
更早的文章

系统相关控件

1 Android Support库相关Android Support 库传记1 TextView相关Autosizeing 允许 TextView 根据其内部文本的显示大小,动态的调整其 TextSize 属性值得大小,通过此设置,开发者可以很轻松的在具有动态内容的情况下,对不同的屏幕中,文本大小进行优化:Autosizeing的TextViewDemo地址TextView 中文字不居中问题解决方案: 在程序中调用 TextView 的方法:setIncludeFontPadding ...…

继续阅读