【问题标题】:Keep button disabled for specified interval in android, even when app is restarted在 android 中保持按钮在指定的时间间隔内被禁用,即使应用程序重新启动也是如此
【发布时间】:2020-10-09 21:01:36
【问题描述】:

我想在两次按下按钮之间添加一个固定的时间间隔(以分钟为单位)。我尝试使用postDelayed()CountDownTimer,但如果我重新启动应用程序,我可以再次按下按钮。

使用 postDelayed()

        binding.trialButton.setOnClickListener {
            Timber.d("Delay button pressed")
            binding.trialButton.isEnabled = false
            binding.trialButton.postDelayed( {
                binding.trialButton.isEnabled = true
            }, 40*1000);
        }

使用倒计时

        binding.trialButton.setOnClickListener {
            Timber.d("Delay button pressed")
            binding.trialButton.isEnabled = false

            val timer = object: CountDownTimer(30000, 1000) {
                override fun onTick(millisUntilFinished: Long) {
                    Timber.d("Tick")
                }

                override fun onFinish() {
                    binding.trialButton.isEnabled = true
                }
            }
            timer.start()
        }

对于我的用例,即使应用程序关闭,按钮也应在指定的时间间隔内保持禁用状态。我有两种方法:

  1. 计算按钮可再次单击时的时间戳并启动postDelayed() 计时器。还将时间戳保存在共享首选项中。如果应用重新启动,则获取保存的值并启动计时器。
  2. 运行后台服务:对这方面不太熟悉。

这里最好的方法是什么?你有更好的技术吗?

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    我认为您可以在共享首选项中保存一个时间戳(可能很简单,例如使用 System.currentTimeMillis() 获得的值),然后,当您的应用程序启动时,您启动一​​个计时器,其超时设置为当前时间和保存在共享首选项中的时间(基本上是您的第一个提案)。
    每次按下启用按钮时,您也会在共享首选项中添加一个新值。

    后台服务选项对我来说似乎有点矫枉过正。

    如果您不需要直观地更改按钮,则可以完全避免使用计时器,仅在按下按钮时根据共享首选项中的值进行评估。

    【讨论】:

    • 似乎合乎逻辑。但是对于我的用例您的第二种方法也不错,但是对于我的用例,我需要在按钮不可点击时将其变灰。
    猜你喜欢
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    • 2021-01-09
    相关资源
    最近更新 更多