【问题标题】:How to stop timer in Android如何在Android中停止计时器
【发布时间】:2020-08-04 08:05:57
【问题描述】:

在我的应用程序中,我想使用CountDownTimer,为此我编写了下面的代码,但我想在某些情况下取消此计时器,然后不运行此计时器!

我在下面编写代码并取消它,但每隔 1 秒再次运行此计时器!

我想在调用 timer.cancel 之后,这个计时器已经取消并且不再运行!

我的代码:

    private fun startTimer(timer: Long) {
        calTimeChecker = timer
        countDownTimer = object : CountDownTimer(Long.MAX_VALUE, 1000) {
            @SuppressLint("SetTextI18n")
            override fun onTick(millisUntilFinished: Long) {
                //Calculate time
                calTimeChecker -= 1
                var seconds = (calTimeChecker)
                val hours = seconds / (60 * 60)
                val tempMint = seconds - hours * 60 * 60
                val minutes = tempMint / 60
                seconds = tempMint - minutes * 60
                //This call api with MVP
                presenter.getLastInfo(token, auctionId)
            override fun onFinish() {
                footerCheckingLay.visibility = View.VISIBLE
                auctionDetail_footerInfo.visibility = View.INVISIBLE
                auctionDetail_footerBottom.enableDisableView(false)
                auctionDetail_footerPlusBidBtn.enableDisableView(false)
            }
        }.start()

    override fun loadLastInfoUI(data: BidsRes) {
            cancelTimer()
}

调用presenter.getLastInfo(token,auctionId) api时,通过loadLastInfoUI接收这个api数据。

    private fun cancelTimer() {
        try {
            Log.e("BidsLog", "Cancel")
            countDownTimer.cancel()
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

我的日志猫:

2020-08-04 12:28:07.646 30602-30602/com.app.android E/BidsLog: Cancel
2020-08-04 12:28:08.642 30602-30602/com.app.android E/BidsLog: Cancel
2020-08-04 12:28:09.641 30602-30602/com.app.android E/BidsLog: Cancel
2020-08-04 12:28:10.643 30602-30602/com.app.android E/BidsLog: Cancel
2020-08-04 12:28:11.655 30602-30602/com.app.android E/BidsLog: Cancel
2020-08-04 12:28:12.645 30602-30602/com.app.android E/BidsLog: Cancel

为什么从cancelTimer 方法调用取消日志后,再次调用此方法而不取消此计时器?

如何取消它并只显示此日志消息一次?

【问题讨论】:

  • 我的回答对您有帮助吗?你还在为定时器而烦恼吗?
  • '为什么没有人帮助我?'可能是因为你不回复别人的答案...

标签: android kotlin timer


【解决方案1】:

您的计时器正在取消。将日志添加到onTick 方法,然后调用取消并检查是否不再打印来自onTick 的日志,以确保您的计时器已取消。 您看到 "BidsLog: Cancel" 的原因是取消计时器并不会取消日志记录。

【讨论】:

    猜你喜欢
    • 2012-05-29
    • 2012-05-05
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多