Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与直接使用System.currentTimeMillis()相比,使用CountDownTimer()有什么优势_Java_Android_Countdowntimer - Fatal编程技术网

Java 与直接使用System.currentTimeMillis()相比,使用CountDownTimer()有什么优势

Java 与直接使用System.currentTimeMillis()相比,使用CountDownTimer()有什么优势,java,android,countdowntimer,Java,Android,Countdowntimer,我有几个计时器需要同时运行。我知道当倒计时器进入最后完成阶段[onFinish()]时会出现问题,有时会提前一点完成,但我不太了解其中一个相对于另一个的优点/缺点。直接调用System.currentTimeMillis()必须更轻,但倒计时必须有一些优势,而不仅仅是易于使用,不是吗 例如,像 long totalTime = 30000; long startTime = System.currentTimeMillis(); long currTime = System.currentTim

我有几个计时器需要同时运行。我知道当倒计时器进入最后完成阶段[onFinish()]时会出现问题,有时会提前一点完成,但我不太了解其中一个相对于另一个的优点/缺点。直接调用System.currentTimeMillis()必须更轻,但倒计时必须有一些优势,而不仅仅是易于使用,不是吗

例如,像

long totalTime = 30000;
long startTime = System.currentTimeMillis();
long currTime = System.currentTimeMillis();
while(totalTime > startTime - currTime){
    currTime = System.currentTimeMillis();
}
System.out.println("Finished!");

CountDownTimer
的主要优点是在倒计时期间定期收到通知。这些通知提供了一种对剩余时间作出反应的简单方法,而不是主动调用
System.currentTimeMillis()
,这可能需要某种计时器机制
CountDownTimer
代表您进行计时器设置、回调和清理


您的示例代码将使CPU非常繁忙(从而消耗更多的电池寿命),但没有任何好处。如果代码在主线程上运行,它还将使应用程序的UI无响应。另一方面,
倒计时程序
不会暂停UI,并且只会在执行通知时消耗CPU时间。从性能和易用性的角度来看,使用
CountDownTimer
是正确的选择。

我可以理解,如果在整个计时器过程中需要执行某些操作,这是一种优势。我所需要做的就是完成后做点什么。在这种情况下,倒计时比我在原始帖子中编辑的快速示例有什么真正的优势吗?更新了我的答案。如果您试图解决“在Y时间单位过去后执行X”的问题,而不关心在此期间发生了什么,那么最好使用.Great答案。你知道倒计时和定时器任务是如何维护和检查系统时间的吗?我假设他们都在进行各自的系统调用,这就是为什么我认为自己进行currentTimeMillis调用会更轻松。
CountDownTimer
的代码非常简单并且可用。在内部,它将消息发布到
处理程序
,该处理程序在将来的指定时间间隔调用
onTick()
。计算这些时间间隔时,它调用
SystemClock.elapsedRealtime()