执行操作的时间表

时间:2011-11-30 23:06:19

标签: android

我有一堆操作需要在确切的等待期后在Android应用程序中执行。

动作1:1000ms后启动
行动2:2000ms后开始 行动3:在3000ms之后开始

我开发了两种不同的方法来实现这一目标。一个带有ScheduledThreadPoolExecutor,另一个带有循环。如果执行的动作太多而且感觉也不那么精确,则ScheduledThreadPoolExecutor会导致OutOfMemoryException。带循环的版本实际上非常好并且感觉很精确,但当然使用了大量的CPU能力。

有没有人有类似任务的经验,可以给我一个暗示最好的方法是什么?

哦,这当然会在AsyncTask中运行。

THX 西蒙

int[] times = new int[]{ 1000, 2000, 3000 };

// 1. use ScheduledThreadPoolExecutor
ScheduledThreadPoolExecutor ex = new ScheduledThreadPoolExecutor(times.length);
for(int i = 0; i < times.length; i++){
    ex.schedule(new Runnable() {
        @Override
        public void run() {
            System.out.println("timer");
        }
    }, times[i], TimeUnit.MILLISECONDS);
}

// 2. use loop
int i = 0;
int max = times.length;
long start = System.currentTimeMillis();
while(i < max){
    int t = times[i];
    long diff = System.currentTimeMillis() - start;
    if(diff >= t){
        System.out.println("loop");
        i++;
    }
}

2 个答案:

答案 0 :(得分:0)

您的选项1明显优于您的选项2,因为您不必为运行它而浪费尽可能多的CPU时间。

答案 1 :(得分:0)

由于你是在循环中创建可运行的对象,我猜他们都会做同样的事情?如果是这种情况,为什么不在循环之外创建一个runnable,然后在schedule方法中重用它呢?