在Java / android中拥有多个连续计时器的最准确解决方案是什么?或者换句话说,在当前计时器完成之前,延迟下一段代码的最佳选择是什么?
背景资料如果问题不清楚: 为了练习编码,我想创建一个没有广告的免费应用程序,以帮助练习自由潜水。基本思想是让几个计时器相继运行。例如:
起初我以为我可以使用计时器类,但我不知道在计时器完成之前如何暂停代码。所以所有的计时器同时运行。 我已经阅读了有关CountDownLatch和Handler的内容,但我没有足够的经验来判断什么才是最适合我的目的。之前我做了一个python版本并使用了sleep。它运行良好,但对于较长的计时器,它是不准确的几秒钟,这是一个问题。
我相信另一种选择是使用常规计时器,但运行一个while循环,直到显示的文本== 0.我不知道这个无限循环是否会使应用程序崩溃,干扰计时器的准确性或有任何其他负面影响。
任何帮助/想法将不胜感激。谢谢!
答案 0 :(得分:0)
我建议你每隔几毫秒检查一次系统时间
您可以通过System.currentTimeMillis()
和Handler
获得相同的效果。
如下所示...
class TimerHandler extends Handler
{
private long start;
private long timeGap;
public void set(long gap)
{
start = System.currentTimeMillis();
this.timeGap = gap;
}
@Override
public void handleMessage(Message msg)
{
long curr = System.currentTimeMillis();
if(curr - start > timeGap)
{
// do what you want.
// If you want your timer to keep on running,
// reset start.
}
// send Next Message after 100 ms.
sendEmptyMessageDelayed(-1, 100);
}
}
在您的活动或其他内容中:
public void startTimer(long gap)
{
TimerHandler handler = new TimerHandler();
handler.set(gap);
handler.sendEmptyMessageDelayed(-1, 100);
}
startTimer(2000);
请注意,您可以在调用sendEmptyMessageDelayed()
时使用小的nextTimer来减少错误,但这会导致您的操作系统更频繁地检查您的线程,这不是一个好主意。