Android 从 Intent 开始 Activity 后退按钮的行为无法预测
Android Back button behaves unpredictably on Activity started from Intent
在我的应用程序中,我有 3 个活动:
MainActivity
,这是启动应用程序时出现的主屏幕
SettingsActivity
,从MainActivity
开始
DownloadActivity
,从SettingsActivity
. 开始
DownloadActivity
提供应用内内容列表供用户下载。实际下载由 Android 的 DownloadManager
处理,它显示正在进行的下载的通知。点击该通知将触发一个意图,将用户带到 DownloadActivity
.
现在,如果我执行以下操作:
启动应用程序,转到 SettingsActivity
,从那里转到 DownloadActivity
。
开始下载,然后点击“返回”两次返回 MainActivity
。
下拉通知并点击下载通知,这会将我带回 DownloadActivity
。
回击。
重复步骤 3 和 4 两次。
我第一次执行第 4 步时,“后退”按钮会将我从 DownloadActivity
直接带到 MainActivity
– 最后一个 activity 在我点击通知之前显示的应用程序,它是我想要的。
然而,第二次后退按钮会在当前按钮下方显示第二个 DownloadActivity
,我需要再次点击后退按钮才能返回 MainActivity
。
第三次,有一堆4个DownloadActivity
实例,需要按四次Back
按钮到return到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
是对开始下载的 activity 的引用。)
是什么导致了这种奇怪的行为,我怎样才能让后退按钮始终 return 到最后 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);
在我的应用程序中,我有 3 个活动:
MainActivity
,这是启动应用程序时出现的主屏幕SettingsActivity
,从MainActivity
开始
DownloadActivity
,从SettingsActivity
. 开始
DownloadActivity
提供应用内内容列表供用户下载。实际下载由 Android 的 DownloadManager
处理,它显示正在进行的下载的通知。点击该通知将触发一个意图,将用户带到 DownloadActivity
.
现在,如果我执行以下操作:
启动应用程序,转到
SettingsActivity
,从那里转到DownloadActivity
。开始下载,然后点击“返回”两次返回
MainActivity
。下拉通知并点击下载通知,这会将我带回
DownloadActivity
。回击。
重复步骤 3 和 4 两次。
我第一次执行第 4 步时,“后退”按钮会将我从 DownloadActivity
直接带到 MainActivity
– 最后一个 activity 在我点击通知之前显示的应用程序,它是我想要的。
然而,第二次后退按钮会在当前按钮下方显示第二个 DownloadActivity
,我需要再次点击后退按钮才能返回 MainActivity
。
第三次,有一堆4个DownloadActivity
实例,需要按四次Back
按钮到return到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
是对开始下载的 activity 的引用。)
是什么导致了这种奇怪的行为,我怎样才能让后退按钮始终 return 到最后 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);