将Time替换为ScheduledExecutorService
看提示:
多线程并行处理定时任务时,Timer运行多个TimeTask时,只要其中之一没有捕获抛出的异常,其它任务便会自动终止运行,使用ScheduledExecutorService则没有这个问题。
//org.apache.commons.lang3.concurrent.BasicThreadFactory
ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1, new BasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon(true).build());
executorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
//do something
}
},initialDelay,period, TimeUnit.HOURS);
于是开始:
mCycleTimer.cancel();
替换为:mCycleScheduled.shutdown();
mCycleTimer = new Timer();
替换为:mCycleScheduled = Executors.newScheduledThreadPool(1);
mCycleTimer.schedule(mCycleTask, delay, mSliderDuration);
替换为:
mCycleScheduled.scheduleAtFixedRate(mCycleTask, delay, mSliderDuration, TimeUnit.MILLISECONDS);
(TimeUnit.MILLISECONDS表示的是毫秒数)
mResumingTimer.schedule(mResumingTask, 500);
替换为:
mResumingScheduled.schedule(mResumingTask, 500, TimeUnit.MILLISECONDS);