Android后退按钮在从意图开始的活动中表现出不可预测的行为
在我的申请中,我有3项活动:Android后退按钮在从意图开始的活动中表现出不可预测的行为,android,android-intent,android-activity,back,Android,Android Intent,Android Activity,Back,在我的申请中,我有3项活动: MainActivity,这是启动应用程序时出现的主屏幕 设置活动,从main活动 下载活动,从设置活动开始 DownloadActivity为用户提供了一个可下载的应用程序内内容列表。实际下载由Android的下载管理器处理,该管理器显示正在进行的下载的通知。点击该通知将触发一个意图,用户将进入下载活动 现在,如果我执行以下操作: Intent downloadIntent = new Intent(activity.getApplicationContext
,这是启动应用程序时出现的主屏幕MainActivity
,从设置活动
main活动
,从下载活动
开始设置活动
DownloadActivity
为用户提供了一个可下载的应用程序内内容列表。实际下载由Android的下载管理器处理,该管理器显示正在进行的下载的通知。点击该通知将触发一个意图,用户将进入下载活动
现在,如果我执行以下操作:
Intent downloadIntent = new Intent(activity.getApplicationContext(), downloadActivity.class);
downloadIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
activity.getApplicationContext().startActivity(downloadIntent);
启动应用程序,转到设置活动
,然后转到下载活动
开始下载,然后回击两次返回到MainActivity
下拉通知并点击download nofification,这会让我回到DownloadActivity
回击
重复步骤3和4两次
第一次执行步骤4时,后退按钮将直接将我从DownloadActivity
带到MainActivity
——我点击通知前应用程序显示的最后一个活动,这就是我想要的
但是,第二次单击“后退”按钮将在当前活动下方显示第二个DownloadActivity
,我需要再次单击“后退”按钮才能返回到MainActivity
第三次,有4个DownloadActivity
实例,需要按四次Back
按钮才能返回到MainActivity
处理抽头的代码如下所示:
Intent downloadIntent = new Intent(activity.getApplicationContext(), downloadActivity.class);
downloadIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
activity.getApplicationContext().startActivity(downloadIntent);
(activity
是对启动下载的活动的引用。)
是什么导致了这种奇怪的行为,我如何才能让“后退”按钮始终返回到应用程序显示的最后一个活动?这很简单。这一变化起到了关键作用:
- downloadIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
+ downloadIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
结果证明这是一件容易的事。这一变化起到了关键作用:
- downloadIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
+ downloadIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);