gpt4 book ai didi

java - android 在另一个重复任务完成时运行重复任务

转载 作者:太空宇宙 更新时间:2023-11-03 13:13:07 25 4
gpt4 key购买 nike

我有一个任务执行 10 秒,周期为 1 秒,没有延迟,另一个任务执行 30 秒,周期为 5 秒,当第一个任务完成时。

此外,我需要在按下按钮时取消这两个任务。

我不知道哪个是这个问题的最佳解决方案。

  1. 我尝试了基本线程,但会阻塞 GUI,直到两个任务都完成执行
  2. 我试过 ExecutorService executorService =
    Executors.newSingleTheadExecutor()
    但在这种情况下executor.submit(runnable) 一个接一个地执行任务但不执行每个定期

  3. 我尝试使用固定速率的预定执行器,但是scheduled executor 是异步的,我知道怎么用

    executorService.scheduleAtFixedRate(runnable1, delay, period);      
    //and after finished to run
    executorService.scheduleAtFixedRate(runnable2, delay, period);

欢迎任何反馈。

最好的问候,奥勒良R

最佳答案

您可以使用 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();

您可能需要稍微调整一下时间值。希望你明白了。祝你好运。 :)

关于java - android 在另一个重复任务完成时运行重复任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41064380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com