从现有任务中的通知开始新的 activity
Start new activity from notification in existing task
我的应用程序接收推送并根据推送类型打开不同的活动。
我将 TaskStackBuilder
用于未决 Intent,以在我的清单中与 android:parentActivityName
一起创建合成后堆栈。
到目前为止,非常简单。当应用程序未启动时,一切都按预期工作。 但是如果应用程序在后台(任务是运行),挂起的Intent也会启动我想要的activity与清单中定义的父级,但重置现有任务。问题是用户同时启动的其他活动也被清除了。
那么想要实现的是:
- 如果应用程序未启动,请使用合成后台 (MainActivity)
打开所需的 activity
- 如果应用是 运行,尊重当前的任务顺序,只需将所需的 activity 推到它上面。
我似乎无法使用 TaskStackBuilder
。
我很乐意提供一些见解。
你不能用 TaskStackBuilder
真正做到这一点。它不是为此而设计的。它总是将任务重置为开始。
我会做以下事情:
- 让通知启动
Activity
。不要使用 TaskStackBuilder
并且不要创建任何人为的后退堆栈。如果应用程序当前处于活动状态,此 Activity
将 运行 在应用程序的当前任务中,并且它将置于最近打开的 Activity
之上。
- 在这个新
Activity
的 onCreate()
中,检查这个 Activity
是否是使用 isTaskRoot()
的任务的根。如果此 Activity
是任务的根,这意味着应用程序在启动此 Activity
之前未处于活动状态。在这种情况下,您可以使用 TaskStackBuilder
创建一个人工后退堆栈,然后以您想要的方式再次启动它(这将重置任务)。
我的应用程序接收推送并根据推送类型打开不同的活动。
我将 TaskStackBuilder
用于未决 Intent,以在我的清单中与 android:parentActivityName
一起创建合成后堆栈。
到目前为止,非常简单。当应用程序未启动时,一切都按预期工作。 但是如果应用程序在后台(任务是运行),挂起的Intent也会启动我想要的activity与清单中定义的父级,但重置现有任务。问题是用户同时启动的其他活动也被清除了。
那么想要实现的是:
- 如果应用程序未启动,请使用合成后台 (MainActivity) 打开所需的 activity
- 如果应用是 运行,尊重当前的任务顺序,只需将所需的 activity 推到它上面。
我似乎无法使用 TaskStackBuilder
。
我很乐意提供一些见解。
你不能用 TaskStackBuilder
真正做到这一点。它不是为此而设计的。它总是将任务重置为开始。
我会做以下事情:
- 让通知启动
Activity
。不要使用TaskStackBuilder
并且不要创建任何人为的后退堆栈。如果应用程序当前处于活动状态,此Activity
将 运行 在应用程序的当前任务中,并且它将置于最近打开的Activity
之上。 - 在这个新
Activity
的onCreate()
中,检查这个Activity
是否是使用isTaskRoot()
的任务的根。如果此Activity
是任务的根,这意味着应用程序在启动此Activity
之前未处于活动状态。在这种情况下,您可以使用TaskStackBuilder
创建一个人工后退堆栈,然后以您想要的方式再次启动它(这将重置任务)。