问题表述:
开发的一款应用,在进入到某一个页面时,用点击Home键,应用退到后台,屏幕显示桌面,再点击任务后台列表重新打开应用,没有问题,但是如果换成点击桌面上的应用图标,竟然重新从开屏页开始启动了应用,通常情况下应该也会恢复到退出时的页面的。
问题原因:
后来发现导致整个问题的原因是:在启动页面里加上android:launchMode="singleTask"导致的。
<activity android:name=".activities.SplashActivity"
android:screenOrientation="portrait"
android:theme="@style/splash_theme"
android:launchMode="singleTask"><intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
解决思路:
1、直接删除这一行,问题就会顺利解决。
如果必须要使用single Task,还可以如下解决:
2、在启动Acticity的OnCreate生命周期方法中添加如下代码
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 如果启动页是从后台进入前台,直接关闭启动页面,不显示
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
finsh();
return;
}
}
3、还可以判断启动时,启动页是否在最上层,如果不在,就说明是从后台进入的。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Acticity自动的isTaskRoot()判断,启动Acticity启动时,是否在最上层,第一次启动是应该 是任务栈里空的,只有启动页一个Acticity,所以一定是在最上层的,反之则是从后台启动。
if (!this.isTaskRoot()) {
finish();
return ;
}
}