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

Kotlin中如何设置支持用户自定义时长的CountDownTimer,解决时长修改不生效问题

问题原因
  • CountDownTimer 的构造参数为值传递,你在全局初始化 timer 实例时,已经用初始值 time=5 计算出总时长 5000ms 存入实例内部,后续修改 time 变量不会改变已创建实例的内置计时参数,所以每次启动都只会倒计时5秒。
解决方案

你需要在每次获取到用户输入的最新时长后,再创建新的CountDownTimer实例启动,修改逻辑如下:

  1. 先将全局的计时器变量改为可空类型,取消提前初始化的逻辑:
var timer: CountDownTimer? = null
  1. 修改点击事件逻辑,每次启动前先销毁旧计时器,再用最新时长创建新实例:
bntTimer.setOnClickListener(){
    if(TextUtils.isEmpty(etTime.text)) {
        Toast.makeText(this, "Por favor, informe o tempo.", Toast.LENGTH_SHORT).show();
    }
    else{
        // 终止之前运行的计时器,避免冲突和内存泄漏
        timer?.cancel()
        val time = etTime.text.toString().toLong()
        // 用最新时长创建新的计时器实例
        timer = object : CountDownTimer(time * 1000, 1000) {
            override fun onTick(millisUntilFinished: Long) {
                bntTimer.text = (millisUntilFinished / 1000).toString()
                if (!on)
                    turnOn()
            }

            override fun onFinish() {
                bntTimer.text = "Timer"
                if (on)
                    turnOff()
            }
        }
        Toast.makeText(this@MainActivity, "Timer Contando", Toast.LENGTH_SHORT).show()
        timer.start()
    }
}

注意:页面销毁时需要调用 timer?.cancel() 主动停止计时器,避免内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:48:02