问题:
第一次安装app,打开、正常登录到主页面,这时候点击home键,返回到桌面,再点击应用icon,并没有按我们想的立马回到主页面。
原因:
- 每次启动Intent导致新创建Task的时候,该Task会记录导致其创建的Intent;而如果后续需要有一个新的与创建Intent完全一致(完全一致定位为:启动类,action、category等等全部一样,不可多项也不可缺少),那么该Intent并不会触发Activity的新建启动,而只会将已经存在的对应Task移到前台;这也就是为什么桌面会在再次点击图标时将后台任务挪到前台而不是重新启动App的实现。
- 第一次安装启动的Intent跟从桌面点击启动的Intent不是一个启动类(参考原因1),所以它会再次创建启动页,而不是回到之前的页面。
解决方案:
在启动页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;
}
}
}
正常情况下,启动页(也叫闪屏页)如果是第一次启动是任务栈的根,一般启动完后就会finish掉,根Acitivity就变成了主页面,当按home键,再次从桌面图标点击进来是,启动页会走这段代码,然后finish掉当前页,后台切到前台,问题解决。