Android Studio实现仅运行一次的CountDownTimer,解决重复启动问题
解决CountDownTimer多次启动的问题
问题出在你每次调用DissapearSkip()方法时,都会创建一个全新的CountDownTimer实例并启动它,但之前已经启动的计时器并没有被取消,导致多个计时器同时运行。
修改方案:
- 把计时器对象声明为类的成员变量,不要在方法内部创建:
private var skipTimer: CountDownTimer? = null
- 修改
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() }
- 页面销毁时记得清理计时器(防止内存泄漏):
override fun onDestroy() { super.onDestroy() skipTimer?.cancel() skipTimer = null }
内容的提问来源于stack exchange,提问作者tutel
相关产品推荐
相关产品推荐

