gpt4 book ai didi

带有深度链接 : onNewIntent called multiple times 的 Android 导航组件

转载 作者:行者123 更新时间:2023-12-03 13:27:28 33 4
gpt4 key购买 nike

这次我需要您的帮助,了解如何使用带有深度链接的 android 导航组件。
我一直在关注这个documentation fragment 和深度链接之间的连接工作正常。
问题在于接收深度链接的 Activity 。就我而言,我设置了 android:launchMode="singleTask"

<activity android:name=".features.welcome.WelcomeActivity"
android:launchMode="singleTask">
<nav-graph android:value="@navigation/welcome_nav_graph" />
</activity>

override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
Timber.d("onNewIntent: $intent with activity: $this")
navController.handleDeepLink(intent)
}
通过这种配置,我注意到了一些奇怪的行为:
每次单击深度链接时,WelcomeActivity 都会收到两次 onNewIntent 调用。有时甚至会创建该 Activity 的新实例……例如
1_object1-onNewIntent
2_object1-onNewIntent
3_object2-onCreate
这里有一些日志:

First launch

onCreate: Intent { flg=0x10000000cmp={applicationId}/{package}.WelcomeActivity } with activity:{package}.WelcomeActivity@4adbef0

Open deep link

onNewIntent: Intent { act=android.intent.action.VIEWcat=[android.intent.category.BROWSABLE] dat=https://{depp_link}…flg=0x10010000 cmp={applicationId}/{package}.WelcomeActivity (hasextras) } with activity: {package}.WelcomeActivity@4adbef0

onNewIntent: Intent { act=android.intent.action.VIEWcat=[android.intent.category.BROWSABLE] dat=https://{depp_link}...flg=0x1001c000 cmp={applicationId}/{package}.WelcomeActivity (hasextras) } with activity: {package}.WelcomeActivity@4adbef0

onCreate: Intent { act=android.intent.action.VIEWcat=[android.intent.category.BROWSABLE] dat=https://{depp_link}...flg=0x1001c000 cmp={applicationId}/{package}.WelcomeActivity (hasextras) } with activity: {package}.WelcomeActivity@b77c6b

Kill the app and open deep link

onCreate: Intent { act=android.intent.action.VIEWcat=[android.intent.category.BROWSABLE] dat=https://{depp_link}...flg=0x10018000 cmp={applicationId}/{package}.WelcomeActivity (hasextras) } with activity: {package}.WelcomeActivity@b78f4df

onNewIntent: Intent { act=android.intent.action.VIEWcat=[android.intent.category.BROWSABLE] dat=https://{depp_link}...flg=0x1001c000 cmp={applicationId}/{package}.WelcomeActivity (hasextras) } with activity: {package}.WelcomeActivity@b78f4df

onCreate: Intent { act=android.intent.action.VIEWcat=[android.intent.category.BROWSABLE] dat=https://{depp_link}...flg=0x1001c000 cmp={applicationId}/{package}.WelcomeActivity (hasextras) } with {package}.WelcomeActivity@dfe87b2


更新:
1 -似乎启动模式与此问题无关。我注意到默认启动模式相同。
2- navController.navigate(intent.dataString.toUri()) 似乎工作正常。所以我猜问题是navController.handleDeepLink(intent)。

最佳答案

当回调 onNewIntent第一次到达,设置标志intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);并将变异的 Intent 传递给 handleDeepLink(intent);此标志消除了 onNewIntent 的第二次到达由于重新附加到现有的 Activity 而导致的回调(完全重建回栈跟踪到您想要的深度链接目标)而不是启动新的Activity .
详情在handleDeepLink的源代码中方法。

关于带有深度链接 : onNewIntent called multiple times 的 Android 导航组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61951850/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com