【发布时间】:2019-11-05 10:15:54
【问题描述】:
这个问题的其他实例都没有解决我的问题。我有一个片段出现在事务序列的末尾。这意味着当其中包含的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 导航离开时就会被调用,但它有时会以某种方式存活并从另一个 Fragment 关闭应用程序。使用日志,我还发现有时似乎有 2 个倒计时实例。如何确保此倒计时在此片段之外永远不会激活?
【问题讨论】:
-
"有时会出现 2 次倒计时" -> 如果在任何情况下您的
startCountDown()被多次调用,则之前的计时器引用将丢失并继续运行 -
代码看起来不错;您似乎正在正确处理生命周期。
onStop()总是被称为 1-for-1 和onStart(),除非你正在做一些非常疯狂的事情......很可能问题出在此处未发布的代码。