Таймер не отменяется - PullRequest
       36

Таймер не отменяется

0 голосов
/ 28 октября 2019

Ни один из других примеров этого вопроса не решает мою проблему. У меня есть фрагмент, который появляется в конце последовательности транзакций. Оно предназначено для закрытия приложения, когда Timer, содержащееся в нем, завершается:

var terminalTimer: Timer? = null

class TerminalFragment : Fragment() {

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

}

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_terminal, container, false)
}

override fun onStart() {
    super.onStart()


    initUi()
    startCountDown()

}

override fun onStop() {
    super.onStop()

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

    stopCountDown()

}

private fun startCountDown() {

    if (terminalTimer == null) {
        terminalTimer = Timer()

        terminalTimer!!.schedule(object : TimerTask() {
            override fun run() {

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

            {

                    activity?.finish()


            }

        }, 5000)
    }

}

private fun stopCountDown() {

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

    terminalTimer?.cancel()
    terminalTimer?.purge()
    terminalTimer = null

}

private fun returnToStart() {

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

    (context as MainActivity).restartFlow() // calls popBackStackImmediate() for every fragment in the backstack, returning user to the beginning of their flow
}

companion object {
    @JvmStatic
    fun newInstance(terminalType: String, amountLoaded: Double) =
        TerminalFragment().apply {
            arguments = Bundle().apply {

            }
        }
}

}

stopCountDown() вызывается всякий раз, когда фрагмент перемещается от, но оно каким-то образоминогда выживает и закрывает приложение из другого фрагмента. Используя журналы, я также обнаружил, что иногда есть 2 экземпляра этого таймера. Как я могу гарантировать, что этот обратный отсчет никогда не будет активным вне этого фрагмента и будет отменен / уничтожен в onStop () фрагмента?

...