Android Studio Profiler中带CoroutineScope的NavController出现无限重置问题的原因咨询
我最近碰到了一个诡异的问题:我的App默认从Route.Init启动,通过NavMultiClickPreventer工具类跳转到Route.Home,这个工具类是我用来避免导航重复点击的(因为导航逻辑里会执行API请求)。正常运行App时完全没毛病,但一打开Android Studio Profiler(我用的是2024.2.1.11版本),App就会在Route.Home页面无限重置,每次重置都有延迟,还会打印这条日志:
WindowOnBackDispatcher com.myapp.test W sendCancelIfRunning: isInProgress=falsecallback=androidx.activity.OnBackPressedDispatcher$Api34Impl$createOnBackAnimationCallback$1@4009e08
我通过移除NavMultiClickPreventer里的CoroutineScope解决了问题,但始终搞不懂背后的原因,有没有大佬能帮忙分析下?
我的导航相关代码如下:
NavHost( navController = navController, startDestination = Route.Init ) { composable<Route.Init> {} composable<Route.Home> {} } NavMultiClickPreventer.navigate( navController, Route.Home ){ popUpTo(0) { inclusive = true } launchSingleTop = true } object NavMultiClickPreventer { private val isNavigated = mutableStateOf(false) private val scope = CoroutineScope(Dispatchers.Unconfined) fun navigate(navController: NavController, targetRoute: Route, builder: NavOptionsBuilder.() -> Unit = {}) { if (!isNavigated.value) { isNavigated.value = true navController.navigate(targetRoute){ builder() } resetAfterDelay() } } private fun resetAfterDelay() { scope.launch { delay(100) isNavigated.value = false } } }
备注:内容来源于stack exchange,提问作者jhcho




