情景再现:在开发的时候,一般安装替换原来的应用,打开应用是不会发生这个问题的,而是当我们从下载链接下载应用,下载完成后,一般系统会有“完成”和“直接打开”两个选项。如果点击“完成”,应用是正常运行的,不会出现标题所说的问题;而当点击“直接打开”,问题就来了,打开应用之后,随便弄点操作,然后按HOME键,回到桌面,一般情况下,我们再点击桌面应用图标,是会回到按HOME之前的页面,然而这次它并不是朝我们预想的方向走,你打开应用后会发现,它不是回到之前的页面,而是启动了新的应用,之前的页面也没有被kill掉,按下返回键还是会回退到之前的页面,等于是打开了两个相同的应用!
解决方案:这个问题困扰了我很久,也查找了很多资料,也没有得到解决(没有找到),网上都是说将第二个页面的launchMode属性设置为singleTask,比如说有两个页面,第一个是登录界面,第二个为主界面,将主界面的启动模式设置为singleTask,这样虽然按照之前的操作流程,在第二次打开应用,进到主界面的时候,只有一个,但是这样每次都要到登录界面再到主界面,情况虽然有所改善,但还是没有完美解决。
完美解决方案:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int flag=getIntent().getFlags();
System.out.println("getFlags---"+flag+"------"+(flag&Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT));
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
//完美解决:APP下载安装后,点击“直接打开”,启动应用后,按下HOME键,再次点击桌面上的应用,会重启一个新的应用问题
finish();
return;
}
}
就是在onCreate()内的setContentView()之前多一个判断,日志输出情况: