我的任务执行时间为1秒,没有延迟执行10秒,另一个任务执行30秒,第一个任务完成时间为5秒。
此外,我需要在按下按钮时取消这两项任务。
我不知道哪个是这个问题的最佳解决方案。
我试过ExecutorService executorService =
Executors.newSingleTheadExecutor()
,但我是这个案例的
executor.submit(runnable)
执行一个接一个的任务但不执行
每个人定期
我尝试了预定的执行者,按计划的固定费率,但是 预定执行程序是异步的,我知道如何使用
executorService.scheduleAtFixedRate(runnable1, delay, period);
//and after finished to run
executorService.scheduleAtFixedRate(runnable2, delay, period);
感谢任何反馈。
最诚挚的问候, AurelianR
答案 0 :(得分:2)
您可以使用CountDownTimer
课程。我嘲笑了一个简单的演示。
我创建了几个Runnable
任务来模拟VolumeUp和VolumeDown函数。
当timerUp
开始时,它会计算给定时间。完成timerUp
计数后,在timerDown
中启动onFinish
。倒计时。
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();
您可能需要稍微调整时间值。希望你明白这个主意。祝好运。 :)
答案 1 :(得分:1)
您可以使用AlarmManager执行重复任务。
或者您可以使用AsyncTask。它允许您在后台进行工作而不会阻止UI线程,然后在必要时对UI进行更新。
答案 2 :(得分:1)
martinkbrown和K Neeraj Lal为此提供了一些很好的答案,这将有助于您的特定情况(您需要使用异步线程来阻止阻止UI线程),但是为了响应这些事件,您应该考虑采用整个项目的ReactiveX方法。它简化了在整个应用程序代码中进行关于仔细定时事件的通信。这是一个更大规模的添加,涉及学习使用开源库,但将从现在开始加速您的开发。
请参阅 http://reactivex.io/和https://github.com/ReactiveX/RxAndroid了解更多信息