Android定时器时间表vs scheduleAtFixedRate

我正在编写一个每10分钟loggingaudio的Android应用程序。 我正在使用一个计时器来做到这一点。 但是schedule和scheduleAtFixedRate有什么区别呢? 使用其中一个有什么性能好处吗?

最好的解释是这个非Android文档 :

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

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

固定延迟计时器( schedule() )基于前一次执行(因此每次迭代将在lastExecutionTime + delayTime处执行)。

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

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

如果你正在使用这种情况下,你想保持与其他东西保持同步,你会想使用scheduleAtFixedRate() 。 从schedule()的延迟可能会漂移并引入错误。

scheduleAtFixedRate()方法需要时,一个简单的schedule()方法将被一次执行,并且额外的参数用于在特定的时间间隔内再次重复该任务。

通过查看语法:

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

这将在30秒时间间隔结束后执行一次。 一种timeoput行动。

 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秒重复一次。

根据java.util.Timer.TimerImpl.TimerHeap的代码

 // this is a repeating task, if (task.fixedRate) { // task is scheduled at fixed rate task.when = task.when + task.period; } else { // task is scheduled at fixed delay task.when = System.currentTimeMillis() + task.period; } 

 java.util.Timer.schedule(TimerTask task, long delay, long period) 

将设置task.fixedRate = false;

 java.util.Timer.scheduleAtFixedRate(TimerTask task, long delay, long period) 

将设置task.fixedRate = true;

btw当屏幕closures时,定时器不工作。 你应该使用AlarmManager。

有样本: http : //developer.android.com/training/scheduling/alarms.html

计划的情况下,只有在适当的时候才执行一次。 另一方面, scheduleAtFixedRate有一个额外的参数周期 ,其中包含后续执行之间的时间(以毫秒为单位)。

更多信息可以在这里find

http://developer.android.com/reference/java/util/Timer.html#schedule(java.util.TimerTask,long