从现有任务中的通知开始新的 activity

Start new activity from notification in existing task

我的应用程序接收推送并根据推送类型打开不同的活动。

我将 TaskStackBuilder 用于未决 Intent,以在我的清单中与 android:parentActivityName 一起创建合成后堆栈。

到目前为止,非常简单。当应用程序未启动时,一切都按预期工作。 但是如果应用程序在后台(任务是运行),挂起的Intent也会启动我想要的activity与清单中定义的父级,但重置现有任务。问题是用户同时启动的其他活动也被清除了。

那么想要实现的是:

  1. 如果应用程序未启动,请使用合成后台 (MainActivity)
  2. 打开所需的 activity
  3. 如果应用是 运行,尊重当前的任务顺序,只需将所需的 activity 推到它上面。

我似乎无法使用 TaskStackBuilder

我很乐意提供一些见解。

你不能用 TaskStackBuilder 真正做到这一点。它不是为此而设计的。它总是将任务重置为开始。

我会做以下事情:

  • 让通知启动 Activity。不要使用 TaskStackBuilder 并且不要创建任何人为的后退堆栈。如果应用程序当前处于活动状态,此 Activity 将 运行 在应用程序的当前任务中,并且它将置于最近打开的 Activity 之上。
  • 在这个新 ActivityonCreate() 中,检查这个 Activity 是否是使用 isTaskRoot() 的任务的根。如果此 Activity 是任务的根,这意味着应用程序在启动此 Activity 之前未处于活动状态。在这种情况下,您可以使用 TaskStackBuilder 创建一个人工后退堆栈,然后以您想要的方式再次启动它(这将重置任务)。