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

Android Studio实现仅运行一次的CountDownTimer,解决重复启动问题

解决CountDownTimer多次启动的问题

问题出在你每次调用DissapearSkip()方法时,都会创建一个全新的CountDownTimer实例并启动它,但之前已经启动的计时器并没有被取消,导致多个计时器同时运行。

修改方案:

  1. 把计时器对象声明为类的成员变量,不要在方法内部创建:
private var skipTimer: CountDownTimer? = null
  1. 修改DissapearSkip()方法,每次启动新计时器前先取消旧的:
fun DissapearSkip() {
    skipTimeButton.visibility = View.VISIBLE
    exoSkip.visibility = View.GONE
    skipTimeText.text = new.skipType.getType()
    skipTimeButton.setOnClickListener {
        exoPlayer.seekTo((new.interval.endTime * 1000).toLong())
    }
    
    // 先取消之前可能存在的计时器
    skipTimer?.cancel()
    
    // 创建新计时器并赋值给成员变量
    skipTimer = object : CountDownTimer(5000, 1000) {
        override fun onTick(millisUntilFinished: Long) {
            println(millisUntilFinished)
            if (new == null) {
                skipTimeButton.visibility = View.GONE
                exoSkip.visibility = View.VISIBLE
                dissappeared = false
                cancel() // 取消当前计时器
                return
            }
        }

        override fun onFinish() {
            val skip = currentTimeStamp
            skipTimeButton.visibility = View.GONE
            exoSkip.visibility = View.VISIBLE
            dissappeared = true
            skipTimer = null // 结束后置空,避免内存泄漏
        }
    }
    
    skipTimer?.start()
}
  1. 页面销毁时记得清理计时器(防止内存泄漏):
override fun onDestroy() {
    super.onDestroy()
    skipTimer?.cancel()
    skipTimer = null
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:42:16