ScheduledExecutorService 或 ScheduledThreadPoolExecutor

ScheduledExecutorService or ScheduledThreadPoolExecutor

我正在构建一个 Android 应用程序,它必须定期在服务中执行某些操作。而且我发现使用 ScheduledThreadPoolExecutorScheduledExecutorServiceTimer 更可取。

谁能解释一下ScheduledExecutorServiceScheduledThreadPoolExecutor的区别,哪个更适合Android?

更新

我刚刚发现 this article and this post 解释了几种实现重复周期性任务的方法之间的区别。就我而言,ScheduledThreadPoolExecutorAlarmManager 更合适。

这个是一样的,ScheduledThreadPoolExecutorScheduledExecutorService

的一个实现

Creating ScheduledThreadPoolExecutor Using Executors

你也可以看看这个

http://tutorials.jenkov.com/java-util-concurrent/scheduledexecutorservice.html

如果你想定期使用它,你应该使用这个方法

scheduleAtFixedRate (Runnable, long initialDelay, long period, TimeUnit timeunit)

ScheduledExecutorService 是一个接口(合同),ScheduledThreadPoolExecutor 实现了该接口。

因为不能直接实例化一个接口,所以只能通过实例化ScheduledThreadPoolExecutor直接使用实现,或者通过工厂方法,比如java.util.concurrent.Executors,returns实例化ScheduledThreadPoolExecutor.

例如

ScheduledExecutorService scheduler =
 Executors.newScheduledThreadPool(1);

scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS); //returns a ScheduledFuture

看看Scheduled Executor Service Usage for Andriod

一个简单的例子希望它能有所帮助

public class MyTask implements Runnable {

    public MyTask() {
    }

    public void run() {
        System.out.println(Thread.currentThread().getName());
        System.out.println("File uploading is start1");

        System.out.println("file uploaded");
    }

}

public class ScheduledExecutorsTest {
    public ScheduledExecutorsTest() {
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int time = 10 ;
        ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
        MyTask myTask = new MyTask();
        //scheduledExecutorService.scheduleAtFixedRate(myTask, 0L, 9L, TimeUnit.SECONDS);
        scheduledExecutorService.schedule(myTask, 3L, TimeUnit.SECONDS);

        scheduledExecutorService.shutdown();
    }

}