CountDownTimer没有取消

时间:2019-10-25 20:24:02

标签: android kotlin

这个问题的其他情况都没有解决我的问题。我有一个片段出现在事务序列的末尾。它旨在在其中包含的CountDownTimer倒计时时关闭该应用程序:

class TerminalFragment : Fragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onStart() {
        super.onStart()
        startOverButton.setOnClickListener {

            returnToStart()
        }

        initUi()

        startCountDown()

    }

    override fun onStop() {
        super.onStop()

        AppLog.i(TAG, "onStop()")

        stopCountdown()

    }
}

private fun startCountDown() {

    terminalCountdown = object : CountDownTimer(5000, 1000) {
        override fun onFinish() {

            AppLog.i(TAG, "Terminal countdown finished")

            (context as MainActivity).finish()
        }

        override fun onTick(millisUntilFinished: Long) {

        }
    }
    .start()
}

private fun stopCountdown() {
    AppLog.i(TAG, "stopCountDown() - Terminal countdown stopped")

    terminalCountdown?.cancel()

    terminalCountdown = null

}

private fun returnToStart() {

    AppLog.i(TAG, "returnToStart()")

    stopCountdown()

    (context as MainActivity).restartFlow()
}
每当片段离开时,都会调用

stopCountDown(),但有时它会以某种方式保留下来并从另一个Fragment中关闭应用程序。使用日志,我还发现有时似乎存在2个此倒数实例。如何确保在此片段之外永远不会进行倒计时?

1 个答案:

答案 0 :(得分:0)

Shrey Greg mentioned in a comment一样,每次我想重新启动CountdownTimer时都在创建一个新实例。这丢失了对先前实例的引用,从而无法取消。