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

Android Jetpack Compose秒表重置后立即自增1的问题求助

Android Jetpack Compose秒表重置后立即自增1的问题求助

各位大佬好!我最近用Jetpack Compose在Android Studio做了一个基础秒表应用,功能上支持启动计时和重置回零,但碰到个奇怪的问题:点击重置后,秒表确实会回到0,但紧接着就自动跳成1,完全不符合预期。

先给大家说下我的核心代码逻辑:

  • time变量存储当前计时数值,用mutableIntStateOf配合remember保存状态
  • isTimerRunning变量标记计时器是否处于运行状态
  • startTimer函数通过协程作用域启动一个while循环,每隔1秒让time自增1
  • resetTimer函数负责停止计时器并把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

火山引擎 最新活动