【发布时间】:2022-08-16 13:53:50
【问题描述】:
当用户按下后退按钮或最小化应用程序时,我想取消计时器。 我尝试在“override fun onDestroy()”上使用 cancel(),但计时器仍在运行。
下面是我的倒计时代码
countDownTimer = object : CountDownTimer(Constants.timerDuration, 1000) {
override fun onTick(millisecondFinished: Long) {
binding?.tvTimer?.text = (millisecondFinished / 1000).toString()
Log.i(\"millis\", \"onTick: $millisecondFinished\")
}
override fun onFinish() {
val action = GameplayDirections.actionGameplayToGameover()
findNavController().navigate(action)
}
}.start()`
这就是我初始化倒计时变量的方式
private var countDownTimer: CountDownTimer? = null
下面是取消定时器的代码
override fun onDestroy() {
super.onDestroy()
countDownTimer.cancel()
countDownTimer = null
Log.i(\"destroy\", \"onDestroyView: destroyed\")
binding = null
}
我已经参考了很多链接,但我仍然无法解决这个问题。即使我按下后退按钮或最小化应用程序,我也可以看到在 logcat 中运行的计时器。
我已经在片段中实现了倒数计时器,计时器完成后我将遍历其他片段。而且由于计时器没有取消,我收到如下所示的错误。
2022-07-24 12:25:15.643 32685-32685/io.ronli.protypist E/AndroidRuntime: FATAL EXCEPTION: main
Process: io.ronli.protypist, PID: 32685
java.lang.IllegalStateException: Fragment Gameplay{735bc2f} (915d1b65-13a2-40f3-b94a-4519fde2252d) not associated with a fragment manager.
at androidx.fragment.app.Fragment.getParentFragmentManager(Fragment.java:1059)
at androidx.navigation.fragment.NavHostFragment$Companion.findNavController(NavHostFragment.kt:375)
at androidx.navigation.fragment.FragmentKt.findNavController(Fragment.kt:29)
at io.ronli.protypist.ui.Gameplay$startTimer$1.onFinish(Gameplay.kt:325)
at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:142)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8105)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045)
-
你到底在哪里创建这个
CountDownTimer对象?
标签: android kotlin timer countdowntimer