Android Jetpack Compose秒表重置后立即自增1的问题求助
Android Jetpack Compose秒表重置后立即自增1的问题求助
各位大佬好!我最近用Jetpack Compose在Android Studio做了一个基础秒表应用,功能上支持启动计时和重置回零,但碰到个奇怪的问题:点击重置后,秒表确实会回到0,但紧接着就自动跳成1,完全不符合预期。
先给大家说下我的核心代码逻辑:
- 用
time变量存储当前计时数值,用mutableIntStateOf配合remember保存状态 isTimerRunning变量标记计时器是否处于运行状态startTimer函数通过协程作用域启动一个while循环,每隔1秒让time自增1resetTimer函数负责停止计时器并把time重置为0- 界面上有显示时间的Text组件,还有启动、重置两个按钮
相关代码片段如下:
// 时间变量 var time by remember { mutableIntStateOf(0) } // 计时器运行状态变量 var isTimerRunning by remember { mutableStateOf(false) } // 启动计时器函数 fun startTimer() { isTimerRunning = true CoroutineScope(Dispatchers.Default).launch { while (isTimerRunning) { delay(1000) time++ } } } // 重置计时器函数 fun resetTimer() { isTimerRunning = false time = 0 }
我猜测问题可能出在协程的执行上?比如点击重置时,虽然把isTimerRunning设为false了,但之前的协程里的delay(1000)已经快结束了,还是会执行一次time++?有没有懂的朋友帮忙分析下,该怎么解决这个问题呀?
备注:内容来源于stack exchange,提问作者Bob Rasner




