Android导航隐式深度链接导致应用程序打开多个实例
我有一个包含两个活动和两个导航图的应用程序——第一个是带有入职流程的启动器活动,第二个是主要活动。我还有一个简单的设置,它遵循的是来自的隐式深度链接示例,用于实现登录链接(用户单击包含一些令牌的链接等) 导航流的第一个用例从Android导航隐式深度链接导致应用程序打开多个实例,android,android-jetpack,android-navigation,android-jetpack-navigation,Android,Android Jetpack,Android Navigation,Android Jetpack Navigation,我有一个包含两个活动和两个导航图的应用程序——第一个是带有入职流程的启动器活动,第二个是主要活动。我还有一个简单的设置,它遵循的是来自的隐式深度链接示例,用于实现登录链接(用户单击包含一些令牌的链接等) 导航流的第一个用例从FragmentOne到FragmentTwo到FragmentTwo,然后导航到main活动,关闭流程中的车载活动 第二个,有问题的用例是当用户单击在FragmentThree中设置的深层链接时,经过一些计算后,还需要导航到MainActivity关闭过程中的Onboard
FragmentOne
到FragmentTwo
到FragmentTwo
,然后导航到main活动
,关闭流程中的车载活动
第二个,有问题的用例是当用户单击在FragmentThree
中设置的深层链接时,经过一些计算后,还需要导航到MainActivity
关闭过程中的OnboardingActivity
。问题是,它实际上按预期工作,登录成功,但问题是,当用户通过深度链接启动应用程序并最小化应用程序时,如果再次单击应用程序图标,则会在具有深度链接的应用程序上启动一个新的应用程序实例,并且每次单击新的应用程序图标都会继续
这不是第一个流程的问题-每当你最小化应用程序并单击应用程序图标时,你就会回到启动的原始应用程序
这就是我到目前为止所做的:
- 启动程序活动没有设置特殊标志(我尝试了
和android:noHistory=“true”
,但运气不好)android:clearTaskOnLaunch=“true”
- 两个活动中都没有特殊的导航控制器内容
- 我目前使用的是
和“androidx.navigation:navigation fragment ktx:2.3.1”
“androidx.navigation:navigation ui ktx:2.3.1”
main活动的:
findNavController().navigate(FragmentThreeDirections.actionFragmentThreeToMainActivity())
requireActivity().finish()
以下是行动的定义:
<action
android:id="@+id/action_fragment_three_to_main_activity"
app:destination="@id/main_activity"
app:enterAnim="@anim/fragment_fade_enter"
app:exitAnim="@anim/fragment_fade_exit"
app:launchSingleTop="true" />
我注意到的唯一区别是,FragmentThree
中的backbackback在第一个和第二个用例之间是不同的。在常规流程中,第一个用例,在F3
中,我们在backstack中有F2
和F3
(因为从F1到F2的动作包括一个app:poputo=“@id/fragment\u one”
和app:popuptinclusive=“true”
),但在第二个用例中,我们在backstack中有F1
和F3
,但在成功登录后,它们都会进入相同的backbackback状态,从而完成原始活动
我刚刚注意到一件新事情——当通过点击一个实际的电子邮件链接来测试深度链接时,我最终出现了与第二个流类似的不良行为,但这次我在应用程序最近列表中有两个应用程序,而原来有问题的流在应用程序最近列表中只有一个应用程序,但仍然启动了多个实例(我所说的多实例是指,每当我单击应用程序图标时,就会启动一个新的应用程序流,并且当我需要多次单击后退以关闭所有不同的MainActivity
)实例时)
adb shell am start -a android.intent.action.VIEW -d "https://example.com/auth/login?token=asd\&session=321\&email=asd@asd.com"