我想在JAVA中使用下面提到的操作进行android开发。
上述步骤应按顺序执行。
我尝试了ExecutorService
,但没有成功。
这是我的参考代码
final Handler h = new Handler();
final int delay = 1000; //milliseconds
ExecutorService executor = Executors.newFixedThreadPool(1);
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
F1();
}
});
for(int i=0;i<30;i++){
executor.submit(t1);
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
executor.shutdown();
//Step 2 (THe Second Thread)
h.postDelayed(new Runnable() {
public void run() {
AnotherFunction()
h.postDelayed(this, delay);
}
}, delay);
答案 0 :(得分:1)
通常,ExecutorService
更适合此类操作。这是一个很好的post,用于描述Timer
和ExecutorService
的差异和功能。
至于你的问题 - 它可以用这样的方式实现:
// here are Runnables with test logic
Runnable foo = new Runnable() {
@Override
public void run() {
Log.d(">>>", "foo");
onTaskFinished();
}
};
Runnable longRunning = new Runnable() {
@Override
public void run() {
try {
Log.d(">>>", "longRunning started");
Thread.sleep(5000);
Log.d(">>>", "longRunning finished");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
// and here is valuable logic
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
ScheduledFuture<?> schedulerHandler;
volatile AtomicInteger tasksNum = new AtomicInteger(0);
private synchronized void onTaskFinished(){
if(tasksNum.incrementAndGet() >= 30){
scheduler.execute(new Runnable() {
@Override
public void run() {
schedulerHandler.cancel(true);
}
});
scheduler.execute(longRunning);
}
}
然后开始操作只需调用此命令:
schedulerHandler = scheduler.scheduleAtFixedRate(foo, 0, 1, TimeUnit.SECONDS);
答案 1 :(得分:0)
您可以考虑使用java.util.Timer
和java.util.TimerTask
类
答案 2 :(得分:0)
如果您正在按照我认为您正在执行的操作,您可以 @erosb 暗示,请使用Timer
和TimerTask
安排方法执行以固定的比率。
以下内容适合您。
final int DELAY_BEFORE_START = 0;
final int RATE = 1000;
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
F1();
}
}, DELAY_BEFORE_START, RATE);