当另一个重复任务完成时,android运行重复任务

我正在执行一个任务,该任务执行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();

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

上一篇:java-ExecutorService JVM不会终止


下一篇:java-使用ThreadPoolExecutor进行状态异常处理