Метод OnTick таймера обратного отсчета не работает, когда я даю время

I'm Running one count down timer for 15 minutes which is equals to 100%,

Когда я в приложении, у меня все работает. Что я делаю, так это то, что когда я закрываю приложение, я сохраняю время начала и открываю приложение, используя текущее время и вычисляя оставшееся время. Я даю оставшееся время методу ontick перед запуском таймера обратного отсчета. на первом тике он показывает правильно, но для следующего тика он начинается с 15 минут. Кто-нибудь может сказать, почему это происходит

 countDownTimer = object : CountDownTimer(900000, 1000) {
                override fun onTick(millisUntilFinished: Long) {
                    activity?.runOnUiThread {
                        val minutes = TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)
                        val seconds = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))

                        val progress = 100 - ((((minutes / 15f) + (seconds / 900f)) * 100).toInt())

                        if (progress == 100) {
                            countDownTimer.cancel()
                            batteryHealthView.hideProgress()
                        }
                        saveData(progress, percentageString)
                    }
                }

                override fun onFinish() {
                    activity?.runOnUiThread {
                        countDownTimer.cancel()
                    }
                }
            }
            if (timeLeft!! > 0) {
                countDownTimer.onTick(timeLeft)
            }
            countDownTimer.start()

person Shanmuka Chowdary    schedule 14.11.2018    source источник


Ответы (1)


Поделитесь кодом, как вы вызываете CountDownTimer(900000, 1000). Кажется, вы используете 900000 каждый раз. Вместо этого вам нужно пересчитать оставшееся время и передать это время в вызове метода.

person Android Team    schedule 14.11.2018
comment
Весь код, который я просто вызываю в обычном методе, переменная обратного отсчета, которую я объявил как (private lateinit var countDownTimer: CountDownTimer), и метод, который я вызываю, ( fun countDownTimer(activity: FragmentActivity?, batteryHealthView: BatteryHealthCheckView, timeLeft: Долго?)) Оставшееся время - это не что иное, как время повторного анализа, которое я прохожу, и каждый раз мне нужно продолжать прогресс, а не начинать с 0. - person Shanmuka Chowdary; 14.11.2018
comment
Вам не нужно проходить 900000 каждый раз, вам нужно сохранять затраченное время, когда вы выходите из приложения, и пересчитывать оставшееся время, когда вы возвращаетесь в приложение, и передавать это время в конструкцию. - person Android Team; 14.11.2018
comment
Спасибо, теперь это сработало каждый раз, когда я отправляю оставшееся время и выдаю правильное значение. - person Shanmuka Chowdary; 14.11.2018