DXM*_*DXM 41 java multithreading android timer scheduled-tasks
我正在编写一个每10分钟录制一次音频的Android应用程序.我正在使用Timer来做到这一点.但是schedule和scheduleAtFixedRate有什么区别?使用一个比另一个有任何性能优势吗?
Eri*_*ric 91
这个非Android文档最好地解释了这种差异:
固定速率计时器(scheduleAtFixedRate())基于开始时间(因此每次迭代将在执行时startTime + iterationNumber * delayTime).
在固定速率执行中,每次执行都是相对于初始执行的预定执行时间进行调度的.如果由于任何原因(例如垃圾收集或其他后台活动)延迟执行,则会快速连续执行两次或更多次执行以"赶上".
固定延迟定时器(schedule())基于先前的执行(因此每次迭代将在执行时lastExecutionTime + delayTime).
在固定延迟执行中,每次执行都是相对于上一次执行的实际执行时间进行调度的.如果执行因任何原因(例如垃圾收集或其他后台活动)而延迟,则后续执行也将延迟.
除此之外,没有区别.您也不会发现显着性差异.
如果您在希望与其他内容保持同步的情况下使用此功能,则需要使用scheduleAtFixedRate().延迟schedule()可以漂移并引入错误.
Luc*_*fer 16
一个简单的schedule()方法将立即执行,而scheduleAtFixedRate()方法采取和额外的参数,这是在特定的时间间隔再次和重复的任务.
通过查看语法:
Timer timer = new Timer();
timer.schedule( new performClass(), 30000 );
Run Code Online (Sandbox Code Playgroud)
这将在30秒时间间隔结束后执行一次.一种timeoput-action.
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 );
Run Code Online (Sandbox Code Playgroud)
这将在1秒后开始,并将每30秒重复一次.
| 归档时间: |
|
| 查看次数: |
46823 次 |
| 最近记录: |