我正在执行一个任务,该任务执行10秒钟,时间为1秒,没有延迟,另一个任务是在完成第一个任务时,执行30秒,时间为5秒.
另外,按下按钮时,我需要取消两个任务.
我不知道哪个是解决此问题的最佳方法.
>我尝试了基本线程,但是会阻塞GUI直到两个任务都完成
执行
>我尝试了ExecutorService executorService =
Executors.newSingleTheadExecutor()但在这种情况下
executor.submit(runnable)一个接一个地执行,但不执行
每个定期
>我以固定利率尝试了定期执行人,但是
预定执行器是异步的,我确实知道如何使用
executorService.scheduleAtFixedRate(runnable1, delay, period);
//and after finished to run
executorService.scheduleAtFixedRate(runnable2, delay, period);
任何反馈表示赞赏.
最好的祝福,
奥雷利亚
解决方法:
您可以使用CountDownTimer类.我模拟了一个简单的演示.
我创建了几个Runnable任务来模拟VolumeUp和VolumeDown函数.
当timerUp启动时,它会在给定的时间内递增计数.完成timerUp计数后,在onFinish中启动timerDown.它倒计时.
public class TimerActivity extends AppCompatActivity {
private TextView out;
int value = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timer);
out = (TextView) findViewById(R.id.out);
setText(value);
timerUp.start();
}
CountDownTimer timerUp = new CountDownTimer(10000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
runnable1.run();
}
@Override
public void onFinish() {
timerDown.start();
}
};
CountDownTimer timerDown = new CountDownTimer(10000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
runnable2.run();
}
@Override
public void onFinish() {
Log.e("done", "onFinish");
}
};
private void setText(final int value){
runOnUiThread(new Runnable() {
@Override
public void run() {
out.setText(String.valueOf(value));
}
});
}
Runnable runnable1 = new Runnable() {
@Override
public void run() {
value += 10;
setText(value);
}
};
Runnable runnable2 = new Runnable() {
@Override
public void run() {
value -= 10;
setText(value);
}
};
}
可以通过调用取消计时器,
timerUp.cancel();
timerDown.cancel();
您可能需要稍微调整一下时间值.希望你能明白.祝好运.