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)