java - 为什么Android倒数计时器运行超过零
问题描述
我有一个倒计时计时器,它开始倒计时当前日期和时间与未来日期和时间之间的小时、分钟和秒。
问题是我遇到了倒数计时器的行为,它在 00:00:00 之后继续运行。倒数计时器除此之外工作正常,但我只是不确定为什么它会继续到 00:00:-1、00:00:-2、00:00:-3...
我添加了一个 if 条件,一旦时间等于“00:00:00”就取消计时器,这起到了作用,但我仍然想知道为什么我会遇到这个问题。我很确定这不正常,因为我已经看到倒数计时器教程一旦达到 0 就会停止,而无需添加额外的逻辑。有什么我错过的吗?
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("dd.MM.yyyy, HH:mm:ss");
formatter.setLenient(false);
String endTime = "23.12.2018, 01:35:00";
Date startDate;
Date endDate;
long endTimeMilli = 0;
try {
endDate = formatter.parse(endTime);
endTimeMilli = endDate.getTime();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
startDate = new Date();
startTime = startDate.getTime();
if(startTime >= endTimeMilli)
return;
mCountDownTimer = new CountDownTimer(endTimeMilli, 1000) {
@Override
public void onTick(long millisUntilFinished) {
startTime -= 1;
long serverUptimeSeconds =
(millisUntilFinished - startTime) / 1000;
int hoursLeft = (int) serverUptimeSeconds / 3600;
int minutesLeft = (int) serverUptimeSeconds % 3600 / 60;
int secondsLeft = (int) serverUptimeSeconds % 3600 % 60;
String timeLeftFormatted = String.format(Locale.getDefault(), "%02d:%02d:%02d", hoursLeft, minutesLeft, secondsLeft);
mCountdown.setText(timeLeftFormatted);
if(mCountdown.getText().toString().equals("00:00:00"))
mCountDownTimer.cancel();
}
@Override
public void onFinish() { }
}.start();
解决方案
推荐阅读
- reactjs - 如何在 reactjs 中修复 moment.js?
- performance - 使用 ant 运行 jmeter 时,是否有可能不仅基于 HTTP 状态代码而且基于响应时间的测试用例失败?
- javascript - 未捕获的类型错误:core_1.style 不是函数
- flutter - 将上下文传递给导航器推送以访问继承的小部件数据
- php - 为什么这个数据集没有被输入数据库?
- html - Flex 不适用于 div 内排列的输入
- php - 从字符串中获取 2 条信息
- spring - 与 Spring Data Elasticsearch 3.1.4 一起使用的正确 Elasticsearch 版本是什么
- protractor - 无法使用量角器测试 toast 消息
- javascript - 在 Flatlist React Native 中传播不可迭代实例的尝试无效