ScheduledExecutorService的简单运用

某天在学习分析android-UniversalMusicPlayer项目时,看到别人写更新音乐进度条时,觉得写法思路不一样,所以记录下来。

ScheduledExecutorService的简单运用_第1张图片
2018-09-04_103903.png

当然在Activity退出的时候还是要释放资源的

    @Override
    public void onDestroy() {
        super.onDestroy();
        stopSeekbarUpdate();
        mExecutorService.shutdown();
    }

所以来学习下这个ScheduledExecutorService

延迟n秒执行

mExecutorService.schedule(new Runnable() {
            @Override
            public void run() {
                
            }
        },3,TimeUnit.SECONDS);

arg1秒后,每隔arg2时间后循环执行任务
scheduleAtFixedRate:该方法在initialDelay时长后第一次执行任务,以后每隔period时长,再次执行任务。注意,period是从任务开始执行算起的。开始执行任务后,定时器每隔period时长检查该任务是否完成,如果完成则再次启动任务,否则等该任务结束后才再次启动任务

 mScheduleFuture = mExecutorService.scheduleAtFixedRate(new Runnable() {
                @Override
                public void run() {
                    mHandler.post(mRunnable);
                }
            },0,1000, TimeUnit.MILLISECONDS);

Timer和ScheduledExecutorService的分析

Timer也是调度器,但它有一些缺陷,参考
Timer的缺陷 用ScheduledExecutorService替代
放弃Timer
概括为两点:

  1. timer执行定时任务时只会创建一个线程,在处理多任务时会存在错误,比方说任务1耗时3s在1s延迟后执行,任务2在3s延迟后执行。最终任务2会在4s后执行,因为单线程,先要执行任务1
  2. 在任务1发生异常时,后续任务2也会终止,用ScheduledExecutorService则不会。

你可能感兴趣的:(ScheduledExecutorService的简单运用)