Android应用 欢迎页 登录页 闪屏页 首页 按home键后 点图标重复启动问题

2,425 阅读3分钟

问题所在

<activity
        android:name=".SplashActivity"
        android:launchMode="singleTask"
        android:screenOrientation="portrait"
        android:theme="@style/splashTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

这一行代码的问题

android:launchMode="singleTask"

设置首页启动的Activity在manifest.xml中启动模式 android:launchMode="singleTask"原因导致

解决方案

去掉 android:launchMode="singleTask"

一下博客提供信息

🙏 http://blog.csdn.net/gufeilong/article/details/72900365

首先我们来看现象: 1、第一次点击图标启动应用是启动首界面A,然后进入第二个界面B;按home键后,再次点击图标,进入的页面B,而不是A为什么? 2、当我们从QQ上打开浏览器显示网页之后,点击桌面图标再次打开浏览器,发现不是刚刚从QQ打开浏览的网页,为什么?

第一个现象; 1、启动新应用 一般情况下当我们启动一个应用后系统会新建一个Task用来存放Activity的实例,一个一个挨个放进去(如果你跳转的时候finish了,就没有了),当你点击返回键之后就会从最上面的一个开始显示,也是一个一个;所以启动新应用时,点开图标之后显示的肯定是第一个页面A了; 2、恢复后台应用 当应用点击home键后到后台了,过了一会又点击图标,希望把你的应用重新调起来,《《关键来了》》系统会根据Intent的信息来寻找是否有存在的Task,如果有就会直接显示所以就会显示页面B,而不是A;如果没有则会启动首页A;这里的Intent信息包括了:启动类,action、category等等,任何一项都要相同

第二个现象: 当我看到这个问题时很不理解,为什么会有这个情况呢?刚刚浏览QQ上的网页用的是浏览器,现在从桌面打开的浏览器都是同一个应用,为什么不显示我刚刚浏览的网页呢,而是给我打开了浏览器的首页? 这里仔细看看第一个问题的2,Intent信息包括了:启动类,action、category等等,任何一项都要相同;对了,启动类不相同!这个时候系统不再是直接把应用对应的Task拿来显示,而是创建了新的首页实例放入到Task中显示; 这就导致了应用一般在第一次手动安装后,点home键,再点图标界面异常的问题;那么解决办法呢? 在首页的onCreate()方法中添加:

 
 if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {  
            //结束你的activity  
            finish();  
            return;  
        }  


或者



// 避免从桌面启动程序后,会重新实例化入口类的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;  
        }  
    }  
}  

验证是都可以的! 判断Intent是要打开一个新的任务,还是将后台的应用给提到前台来;当发现自己不是在Task的,则不进行显示,显示栈内的最顶端的Activity;

问题按home键,启动模式不同🈶️啥区别