在项目开发中遇到一个问题,打开应用进入到某个页面,按下home键后再次进入应用时,总是进入启动页而不是之前的页面,如果按返回键就是进入到之前的页面,这样用户体验很不好,网上主要介绍了两种解决方法。
1、在AndroidManifest.xml文件中对LoginActivity和MainActivity设置启动模式为singleTask,即在activity下加入以下代码:android:launchMode="singleTask";
2、在打开应用最先启动的activity的onCreate()方法的setContentView()方法之前加入以下代码:
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
finish();
return;
}
第一种方法没能解决掉问题,第二种方法解决了。
第二种方法的原理:
正常情况下,打开应用启动A页面,再跳转到B页面,然后按下home键再进入应用,会重新创建A页面,此时A页面在B页面的上面,所以也就出现了问题描述中“如果按返回键就是进入到之前的页面”的情况;
加入判断后,再打开app,还会重新创建A页面,但是此时会判断一下,这时A页面不是在栈底,所以finish掉,然后露出下面的B页面。
2020.1.20更新:继上一次改动之后,这个突然又出现了,在网上搜了下,还是只有两种呼声,第二种答案就是目前所用的,但问题又出现了,所以又试了下另一种,就是去AndroidManifest文件中将第一启动的页面的lanuchmode(页面启动模式)去掉,我之前是设置为了singleTask模式。bug复现的原因就是在某一次更新中我把启动页的模式设置成singleTask。
保险起见两种方法都写在代码里吧,就是:
1、在AndroidManifest文件中,启动页(初次进入的页面)不要设置android:launchMode="singleTask"
属性,如果有了就去掉;
2、在启动页activity的onCreate()方法里的setContentView()方法之前加上以下代码:
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
finish();
return;
}
网友评论