簡體   English   中英

如何在 Android 中停止定時器

[英]How to stop timer in Android

在我的應用程序中,我想使用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方法調用取消日志后,再次調用此方法而不取消此計時器?

我怎樣才能取消它並只顯示一次此日志消息?

您的計時器正在取消。 將日志添加到onTick方法,然后調用取消並檢查是否不再打印來自onTick的日志,以確保您的計時器已被取消。 您看到"BidsLog: Cancel"的原因是因為取消計時器不會取消記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM