后退按钮将我带到启动器 activity 而不是深层链接器 activity

Back button takes me to launcher activity not deep-linker activity

以下程序:

  1. 启动我的应用程序,堆栈:[主页Activity]
  2. 去Facebook,用深link进入Activity X
  3. 按下后退按钮会返回 主页Activity 而不是 Facebook

预计

  1. 启动我的应用程序,堆栈:[主页Activity]
  2. 去Facebook,用深link进入Activity X
  3. 按下后退按钮会返回到 Facebook 应用程序

当我的应用程序事先根本没有启动时,我得到了预期的行为。我看到像 Instagram 这样的其他应用程序确实设法让它正常工作。因此,即使您的应用程序在后台 运行,它也会将您带回到发出深层 link 意图的 activity。

我的activity有launchMode="singleTop"onBackPressed()没有被覆盖,所以它调用超级class实现。

我在这里缺少什么才能做到这一点?

我对其进行了调试,onBackPressed() 最终调用了 finish(),但它让我回到了我的应用程序而不是 Facebook。

原因是Facebook的上线开启了新的任务。返回总是在任务中向上导航 activity 堆栈。

如果您可以控制启动 Facebook 的意图,则有一些标志可以控制 activity 在其中启动的任务。默认是在同一个任务中启动。

我怀疑 Intent.FLAG_ACTIVITY_NEW_TASK 是系统故意添加的——所以这可能是设计使然(按预期工作)。

PS:此演示文稿将向您传授您需要了解的有关 android 活动和任务的所有信息:http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack

添加

android:taskAffinity=""

到清单中 "deep-linked Activity" 的 <activity> 标签。

发生的事情是 Facebook 正在使用 Intent.FLAG_ACTIVITY_NEW_TASK 启动您的 "deep linked Activity"(您应该能够通过检查 [=39= 中 Intent 的内容来验证这一点] 在 onCreate()onNewIntent()

如果您的应用程序已经 运行,Android 会将您现有的任务置于前台并在该任务之上启动 "deep-linked Activity"。当您随后按 BACK 时,它只会完成您的 "deep linked Activity" 并让您进入现有任务。

Android 这样做是因为您的所有 Activity 共享同一个 taskAffinity,因此当它需要为您的应用创建新任务时,它会首先尝试使用相同的亲和力。

如果您将 "deep linked Activity" 的 taskAffinity 设置为空,这应该可以防止 Android 寻找现有任务来启动 Activity .它只会创建一个新任务并将您的 "deep linked Activity" 启动到该新任务中。然后,当你按 BACK 时,你的 Activity 完成了,任务会变成空的,所以任务会完成,它会让你回到任务堆栈中的上一个任务(应该是 Facebook,因为您的应用程序是从那里启动的)。