Как остановить таймер в Android - PullRequest
0 голосов
/ 04 августа 2020

В моем приложении я хочу использовать 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 ,uctionId) api, получите эти данные api с помощью loadLastInfoUI .

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

My logcat:

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 снова вызывать этот метод и не отменять этот таймер?

Как я могу отменить его и только один раз показать это сообщение журнала?

1 Ответ

0 голосов
/ 04 августа 2020

Ваш таймер отменяется. Добавьте журнал в метод onTick, затем вызовите отмену и проверьте, не печатаются ли журналы из onTick, чтобы убедиться, что ваш таймер был отменен. Причина, по которой вы видите "BidsLog: Cancel", заключается в том, что отмена таймера не отменяет запись в журнал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...