我有一个包含两个活动和两个导航图的应用程序-第一个是带有启动流程的启动器活动,第二个是主要活动。在here的隐式深层链接示例之后,我还有一个简单的设置,用于实现登录链接(用户单击包含某些令牌的链接等)。
导航流程的第一个用例是从FragmentOne
到FragmentTwo
到FragmentThree
,然后从那里导航到MainActivity
,关闭OnboardingActivity
在此过程中。
第二个有问题的用例是当用户单击在FragmentThree
中设置的深层链接时,经过一些计算,还需要导航到{{1 }}在此过程中关闭MainActivity
。事实是,它实际上按预期工作,登录成功,但是问题是,当用户通过深层链接启动应用程序并最小化该应用程序时,如果再次单击该应用程序图标,则会出现一个新实例。该应用程序会从具有深层链接的应用程序的顶部启动,并在每次单击新的应用程序图标后继续。
这不是第一个流程的问题-每当您最小化该应用程序并单击该应用程序图标时,您将被带回到已启动的原始应用程序。
这是我到目前为止所拥有的:
OnboardingActivity
和android: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
中,我们在后向堆栈中有F3
和F2
(因为从F1到F2的动作包括一个F3
和app:popUpTo="@id/fragment_one"
),但在第二个用例中,我们在后栈中有app:popUpToInclusive="true"
和F1
,但是在成功登录后,它们都进入了后栈的相同状态,完成了原始活动。
我刚刚注意到的新事物-当通过单击实际的电子邮件链接来测试深层链接时,我的行为与第二个流程相似,但最终我在最近的应用程序列表中有2个应用程序,当原始有问题的流程在应用程序最近列表中只有1个应用程序,但仍启动多个实例时(按多个实例的意思是,每当我单击应用程序图标时,就会启动一个新的新应用程序流程,并且需要单击返回多次关闭F3
)的所有不同实例