You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android Studio Profiler中带CoroutineScope的NavController出现无限重置问题的原因咨询

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

火山引擎 最新活动