【问题标题】:I have one timer and I am having a few problems with this timer我有一个计时器,但这个计时器有一些问题
【发布时间】:2021-12-26 10:52:53
【问题描述】:
  override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val navController = Navigation.findNavController(requireActivity(), R.id.fragment)
    binding.bottomNavigationView.setupWithNavController(navController)

    object : CountDownTimer(100000,100){
        @SuppressLint("SetTextI18n")
        override fun onTick(millisUntilFinished: Long) {
           batteryText.text = "Akü Şarj Durumu: %${millisUntilFinished/1000}"
       }

        override fun onFinish() {
           batteryText.text = "Akü Şarj Durumu: %0"
     }

  }.start()
}

我有一个简单的计时器,但这个计时器有以下问题;

1-) 无论我做什么,Timer 中的 millisInFuture 和 countDownInterval 值都不能每 10 秒从 100 开始计数。

2-) 如果我在计时器用完之前尝试切换到另一个页面,应用程序就会崩溃。当计时器结束时,切换到另一个页面时没有问题。为什么?

3-) 我希望计时器继续计数,即使我切换到另一个页面。当我回到页面时,我不希望它再次从 100 开始。如果应用程序在使用期间减少,我希望用户在用户使用计时器进入页面时看到该数字。

【问题讨论】:

  • 当您从一个屏幕移动到另一个屏幕时,您需要取消计时器。在这样做之前,请记住计时器的位置,并在您从下一个屏幕返回时再次启动计时器。 int seconds = (int) (millisUntilFinished / 1000) % 60

标签: android kotlin timer fragment


【解决方案1】:

如果您希望计时器每 10 秒计时一次,则间隔即第二个参数应为 10000 毫(10 秒),并且由于您希望获得 100 个此类滴答,因此应为 100 * 10 秒 = 1000 秒或 1000000 毫future 即第一个参数。

您的应用程序崩溃,因为它在用户离开屏幕并且您尝试更改视图中的某些内容后收到一个滴答调用。

如果您希望计时器在用户离开活动时仍然运行,那么您应该将计时器托管在 前台服务绑定服务 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    相关资源
    最近更新 更多