后退按钮将我带到启动器 activity 而不是深层链接器 activity
Back button takes me to launcher activity not deep-linker activity
以下程序:
- 启动我的应用程序,堆栈:[主页Activity]
- 去Facebook,用深link进入Activity X
- 按下后退按钮会返回 主页Activity 而不是 Facebook
预计
- 启动我的应用程序,堆栈:[主页Activity]
- 去Facebook,用深link进入Activity X
- 按下后退按钮会返回到 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,因为您的应用程序是从那里启动的)。
以下程序:
- 启动我的应用程序,堆栈:[主页Activity]
- 去Facebook,用深link进入Activity X
- 按下后退按钮会返回 主页Activity 而不是 Facebook
预计
- 启动我的应用程序,堆栈:[主页Activity]
- 去Facebook,用深link进入Activity X
- 按下后退按钮会返回到 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,因为您的应用程序是从那里启动的)。