后退按钮将我带到启动器活动而非深层链接器活动

时间:2015-02-04 12:56:52

标签: android android-activity deep-linking android-navigation activity-stack

遵循程序:

  1. 启动我的应用程序,Stack:[HomeActivity]
  2. 使用深层链接进入Facebook,进入活动X
  3. 按后退按钮会返回 HomeActivity 而不是Facebook
  4. 预期

    1. 启动我的应用程序,Stack:[HomeActivity]
    2. 使用深层链接进入Facebook,进入活动X
    3. 按后退按钮导致返回Facebook App
    4. 当我的应用程序事先没有启动时,我得到了预期的行为。我看到像Instagram这样的其他应用程序确实能够正常运行。因此,即使您的应用程序在后台运行,它也会将您带回发出深层链接意图的活动。

      我的活动有launchMode="singleTop"onBackPressed()未被覆盖,因此它会调用超类实现。

      我在这里错过了什么才能做到这一点?

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

2 个答案:

答案 0 :(得分:4)

添加

android:taskAffinity=""

到清单中“深层链接活动”的<activity>标记。

正在发生的事情是Facebook正在使用Intent.FLAG_ACTIVITY_NEW_TASK启动您的“深层关联活动”(您应该可以通过检查Intent活动中onCreate()的内容来验证这一点}或onNewIntent()

如果您的应用已在运行,Android会将您现有的任务置于前台,并在该任务之上启动“深度链接的活动”。当您按下BACK时,它只会完成您的“深层链接活动”并将您置于现有任务中。

Android执行此操作是因为您的所有活动共享相同的taskAffinity,因此当需要为您的应用创建新任务时,它将首先尝试查找具有相同亲和力的现有任务。

如果您设置“深层链接活动”的taskAffinity以使其为空,则应阻止Android查找现有任务以启动活动。它只会创建一个新任务,并将“深度链接的活动”启动到该新任务中。然后,当您按BACK时,您的活动结束,任务将变为空,因此任务将完成,它将使您回到任务堆栈中的上一个任务(应该是Facebook,因为您的应用程序已启动从那里)。

答案 1 :(得分:0)

原因是Facebook的推出开始了一项新任务。返回始终在任务中导航活动堆栈。

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

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

PS:此演示文稿将向您介绍有关Android活动和任务的所有知识:http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack