You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安卓Kotlin中Chronometer倒计时到0时的停止与状态控制问题

解决方案

核心问题分析

你用while/when轮询时间的方式会阻塞主线程,导致UI无法更新、事件无法响应,这是根本原因。Chronometer的倒计时逻辑需要通过监听计时tick事件实现,而非主动循环查询。


具体实现步骤

1. 定义全局变量记录计时状态

private var countdownTotalSeconds = 30 // 自定义倒计时总时长,比如30秒
private var chronoStartTime: Long = 0

2. 重构题目设置函数

在加载题目时初始化计时、重置UI状态,并绑定Chronometer的tick监听:

fun setupNewQuestion() {
    // 重置UI状态:启用选项、恢复按钮文本
    optionTv1.isEnabled = true
    optionTv2.isEnabled = true
    optionTv3.isEnabled = true
    optionTv4.isEnabled = true
    actionBtn.text = "Submit"

    // 启动计时
    chronoStartTime = System.currentTimeMillis()
    chronometer.base = SystemClock.elapsedRealtime()
    chronometer.start()

    // 绑定计时tick监听
    chronometer.setOnChronometerTickListener { chrono ->
        val elapsedSeconds = (System.currentTimeMillis() - chronoStartTime) / 1000
        val remainingSeconds = countdownTotalSeconds - elapsedSeconds

        if (remainingSeconds <= 0) {
            // 倒计时结束执行操作
            chrono.stop()
            // 禁用所有选项点击
            optionTv1.isEnabled = false
            optionTv2.isEnabled = false
            optionTv3.isEnabled = false
            optionTv4.isEnabled = false
            // 切换按钮文本
            actionBtn.text = "Next Question"
            // 移除监听,避免重复触发
            chrono.setOnChronometerTickListener(null)
        }
    }
}

3. 处理按钮点击逻辑

根据按钮当前文本执行对应操作:

actionBtn.setOnClickListener {
    when (actionBtn.text.toString()) {
        "Submit" -> {
            // 处理提交答案逻辑(比如判断对错)
            // 提交后主动停止计时
            chronometer.stop()
            chronometer.setOnChronometerTickListener(null)
        }
        "Next Question" -> {
            // 加载下一题
            setupNewQuestion()
        }
    }
}

4. 关键注意事项

  • 每次加载新题时必须重置UI状态和计时监听,避免旧监听残留导致逻辑混乱。
  • 绝对不要在主线程中使用while循环或Thread.sleep()等待时间,会直接引发ANR(应用无响应)。
  • 如果需要动态调整倒计时时长,只需修改countdownTotalSeconds的值即可。

内容的提问来源于stack exchange,提问作者Fidias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:45:07