【发布时间】:2021-12-16 03:21:59
【问题描述】:
我有一个运行良好的 CountDownTimer。但是,它有时会在显示倒计时的 TextView 中开始闪烁。我的显示是这样的:
HH:MM:SS
在倒计时时,最后一秒会在一秒钟内从例如 9 跳到 7 到 8。然后下一秒会从8点快速闪烁到6点到7点。
我尝试将变量 millisUntilFinished 直接传递给更新 textView 的方法,但问题仍然存在。请注意,我正在保存倒计时并在 onStop 和 onStart 方法期间继续。
private fun startVisibleCountdown() {
visibleCountdownRunning = true
object : CountDownTimer(timeLeftInMillisecondsVisibleCounter, 1000) {
override fun onTick(millisUntilFinished: Long) {
timeLeftInMillisecondsVisibleCounter = millisUntilFinished
updateCountDownTextVisible()
}
override fun onFinish() {
//not relevant here
}
}.start()
}
fun updateCountDownTextVisible() {
var seconds = (timeLeftInMillisecondsVisibleCounter / 1000).toInt()
val hours = seconds / (60 * 60)
val tempMint = seconds - hours * 60 * 60
val minutes = tempMint / 60
seconds = tempMint - (minutes * 60);
textViewTimer.text = (String.format("%02d", hours)
+ ":" + String.format("%02d", minutes)
+ ":" + String.format("%02d", seconds))
}
应用关闭时保存并返回倒计时:
override fun onStop() {
super.onStop()
if (visibleCountdownRunning) {
timeLeftInMillisecondsVisibleCounter += System.currentTimeMillis()
}
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
putLong(timeLeftVisibleCounterKey, timeLeftInMillisecondsVisibleCounter)
putBoolean(visibleCountdownRunningKey, visibleCountdownRunning)
apply()
}
}
override fun onStart() {
super.onStart()
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
timeLeftInMillisecondsVisibleCounter = sharedPref.getLong(timeLeftVisibleCounterKey, 43200000)
visibleCountdownRunning = sharedPref.getBoolean(visibleCountdownRunningKey, false)
if (visibleCountdownRunning) {
timeLeftInMillisecondsVisibleCounter -= System.currentTimeMillis()
if (timeLeftInMillisecondsVisibleCounter > 0) {
startVisibleCountdown()
} else {
timeLeftInMillisecondsVisibleCounter = 43200000
visibleCountdownRunning = false
}
}
}
【问题讨论】:
-
您是否还在整个代码的其他地方调用了 startVisibleCountdown() 函数?
-
是的,抱歉,这只是在 OnCreateView 中单击一个按钮即可启动它。要我为其添加代码吗?
-
看看我的回答有没有帮助,如果没有,也请提供那部分代码。
标签: android kotlin countdown countdowntimer flicker