遵循程序:
预期
当我的应用程序事先没有启动时,我得到了预期的行为。我看到像Instagram这样的其他应用程序确实能够正常运行。因此,即使您的应用程序在后台运行,它也会将您带回发出深层链接意图的活动。
我的活动有launchMode="singleTop"
,onBackPressed()
未被覆盖,因此它会调用超类实现。
我在这里错过了什么才能做到这一点?
我调试了它,onBackPressed()
最终调用finish()
,但它让我回到我的应用程序而不是Facebook。
答案 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