Android Timer schedule vs scheduleAtFixedRate

我正在编写一个Android应用程序,每10分钟记录一次音频。我正在使用计时器来做到这一点。但是,Schedule 和 scheduleAtFixedRate 之间有什么区别呢?使用一个比另一个有什么性能优势吗?


答案 1

这个非Android文档可以最好地解释这种差异:

固定速率计时器 () 基于开始时间(因此每次迭代将在 ) 执行。scheduleAtFixedRate()startTime + iterationNumber * delayTime

在固定速率执行中,每次执行都是相对于初始执行的计划执行时间来安排的。如果执行因任何原因(例如垃圾回收或其他后台活动)而延迟,则两个或多个执行将快速连续发生以“赶上”。

固定延迟计时器 () 基于先前的执行(因此每次迭代的执行时间均为 )。schedule()lastExecutionTime + delayTime

在固定延迟执行中,每次执行都是相对于上一次执行的实际执行时间进行调度的。如果执行因任何原因(如垃圾回收或其他后台活动)而延迟,则后续执行也将延迟。

除此之外,没有区别。您也不会发现显著的性能差异。

如果要在希望与其他内容保持同步的情况下使用它,则需要使用 。延迟可能会漂移并引入误差。scheduleAtFixedRate()schedule()


答案 2

一个简单的方法将立即执行,而方法采取和额外的参数,用于在特定的时间间隔内一次又一次地重复任务。schedule()scheduleAtFixedRate()

通过查看语法:

Timer timer = new Timer(); 
timer.schedule( new performClass(), 30000 );

这将在30秒时间周期间隔结束后执行一次。一种时间操作。

Timer timer = new Timer(); 
//timer.schedule(task, delay, period)
//timer.schedule( new performClass(), 1000, 30000 );
// or you can write in another way
//timer.scheduleAtFixedRate(task, delay, period);
timer.scheduleAtFixedRate( new performClass(), 1000, 30000 );

这将在 1 秒后开始,并将每隔 30 秒重复一次。