Android导航隐式深层链接导致应用打开多个实例

时间:2020-11-12 20:43:33

标签: android android-jetpack android-navigation android-jetpack-navigation

我有一个包含两个活动和两个导航图的应用程序-第一个是带有启动流程的启动器活动,第二个是主要活动。在here的隐式深层链接示例之后,我还有一个简单的设置,用于实现登录链接(用户单击包含某些令牌的链接等)。

导航流程的第一个用例是从FragmentOneFragmentTwoFragmentThree,然后从那里导航到MainActivity,关闭OnboardingActivity在此过程中。

第二个有问题的用例是当用户单击在FragmentThree中设置的深层链接时,经过一些计算,还需要导航到{{1 }}在此过程中关闭MainActivity。事实是,它实际上按预期工作,登录成功,但是问题是,当用户通过深层链接启动应用程序并最小化该应用程序时,如果再次单击该应用程序图标,则会出现一个新实例。该应用程序会从具有深层链接的应用程序的顶部启动,并在每次单击新的应用程序图标后继续。

这不是第一个流程的问题-每当您最小化该应用程序并单击该应用程序图标时,您将被带回到已启动的原始应用程序。

这是我到目前为止所拥有的:

  • 发起人的活动没有设置特殊标志(我尝试OnboardingActivityandroid:noHistory="true"时没有运气)
  • 在任何一项活动中都没有特殊的导航控制器内容
  • 我当前正在使用android:clearTaskOnLaunch="true""androidx.navigation:navigation-fragment-ktx:2.3.1"

在两种情况下,这都是我启动"androidx.navigation:navigation-ui-ktx:2.3.1"的方式:

MainActivity

这是动作的定义:

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" />

我注意到的唯一区别是,adb shell am start -a android.intent.action.VIEW -d "https://example.com/auth/login?token=asd\&session=321\&email=asd@asd.com" 中的后栈在第一个和第二个用例之间是不同的。在常规流程中,第一个用例在FragmentThree中,我们在后向堆栈中有F3F2(因为从F1到F2的动作包括一个F3app:popUpTo="@id/fragment_one"),但在第二个用例中,我们在后栈中有app:popUpToInclusive="true"F1,但是在成功登录后,它们都进入了后栈的相同状态,完成了原始活动。

我刚刚注意到的新事物-当通过单击实际的电子邮件链接来测试深层链接时,我的行为与第二个流程相似,但最终我在最近的应用程序列表中有2个应用程序,当原始有问题的流程在应用程序最近列表中只有1个应用程序,但仍启动多个实例时(按多个实例的意思是,每当我单击应用程序图标时,就会启动一个新的新应用程序流程,并且需要单击返回多次关闭F3)的所有不同实例

0 个答案:

没有答案