Android 从 Intent 开始 Activity 后退按钮的行为无法预测

Android Back button behaves unpredictably on Activity started from Intent

在我的应用程序中,我有 3 个活动:

DownloadActivity 提供应用内内容列表供用户下载。实际下载由 Android 的 DownloadManager 处理,它显示正在进行的下载的通知。点击该通知将触发一个意图,将用户带到 DownloadActivity.

现在,如果我执行以下操作:

  1. 启动应用程序,转到 SettingsActivity,从那里转到 DownloadActivity

  2. 开始下载,然后点击“返回”两次返回 MainActivity

  3. 下拉通知并点击下载通知,这会将我带回 DownloadActivity

  4. 回击。

  5. 重复步骤 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);