【发布时间】:2021-04-14 15:19:17
【问题描述】:
我正在 Android 中进行倒计时,虽然我确实让倒计时大部分工作正常,但我遇到了一个问题。
这是我当前的代码:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Date now = new Date();
long timeUntilLaunch = launch.getNet().getTime() - now.getTime();
countdownView.setText(countdownFormat.format(new Date(timeUntilLaunch)));
handler.postDelayed(this, 1000);
}
}, 1000);
这可行,但我现在面临的主要问题是,这将每秒更新一次,从这部分代码执行的时间开始,这意味着倒计时可能最多 1 秒。这是因为如果它在秒计时后运行 900 毫秒,倒计时将等到 x.9 秒再刷新。
我解决这个问题的第一种方法是使用一个空的 while 循环,它会等到秒数滴答作响,然后让它运行,但我很快发现这是一个糟糕的主意,因为它会冻结整个应用程序。
最好的方法是什么?
【问题讨论】:
-
Android 有一个名为 CountDownTimer 的类,在这里查看:developer.android.com/reference/android/os/CountDownTimer
-
我这样做了,但似乎行为完全一样,所以倒计时不会在系统时钟更新的那一刻立即更新
-
@YonatanAvhar 我能问一下为什么你希望它在系统时钟更新的那一刻准确更新吗?
-
是的,我应该澄清这一点。我在 RecyclerView 中有多个视图,并且在滚动时,只要用户滚动,处理程序完成的任务就会被调用,这意味着屏幕上的 6 个左右的计时器不会一次全部更新,这看起来很糟糕(它也惹恼了我的“强迫症”)。
标签: java android countdown clock