我需要一些同时运行的计时器。我知道CountDownTimer在完成阶段[onFinish()]时会出现问题,有时它会提前完成,但对其中一个优点/缺点的了解不多。直接调用System.currentTimeMillis()必须更轻,但CountDownTimer必须具有某种优势,而不仅仅是易用性,不是吗?
例如,像
这样的东西long totalTime = 30000;
long startTime = System.currentTimeMillis();
long currTime = System.currentTimeMillis();
while(totalTime > startTime - currTime){
currTime = System.currentTimeMillis();
}
System.out.println("Finished!");
答案 0 :(得分:2)
CountDownTimer
的主要优势是您在倒计时期间收到的常规通知。与主动调用System.currentTimeMillis()
相反,这些通知提供了一种简单的被动地响应剩余时间的方法,这可能需要某种计时器机制。 CountDownTimer
代表您进行计时器设置,回调和清理。
您的示例代码会使CPU非常繁忙(从而消耗更多的电池寿命)而没有任何好处。如果代码在主线程上运行,它还会使应用程序的UI无响应。另一方面,CountDownTimer
不会停止UI,只会在进行通知时消耗CPU时间。从性能和易用性的角度来看,使用CountDownTimer
是正确的选择。