循环倒计时

Looping through Countdown

我试图多次循环 CountDownTimer,但问题是循环在计时器结束之前结束,因此倒计时只运行一次。

循环定时器的函数

private void doWorkout(){
    int currentSet = 1;
    for (int i = 1; i<= NUMBER_OF_SETS; i++){
        Log.d(TAG, "doWorkout: iteration " + i);
        startWorkoutTimer();
        //make for loop sleep till timer is done
    }

}

private void startWorkoutTimer() {
    mWorkoutCountDownTimer = new CountDownTimer(START_TIME, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            mWorkRestLabel.setText("Work");
            mWorkRestLabel.setVisibility(View.VISIBLE);
            mTimeLeftInMillis = millisUntilFinished;
            updateCountDownText();
        }

        @Override
        public void onFinish() {
            mWorkoutTimerRunning = false;
            mButtonStartPause.setText("start");
            mButtonStartPause.setVisibility(View.INVISIBLE);
            mButtonReset.setVisibility(View.VISIBLE);
            mWorkRestLabel.setVisibility(View.INVISIBLE);
            startRestTimer();
        }
    }.start();

    mWorkoutTimerRunning = true;
    mButtonStartPause.setText("pause");
    mButtonReset.setVisibility(View.INVISIBLE);
}

for 循环不会等待 CountDownTimer 完成。所以它同时启动所有计时器,所以它看起来只 运行 一次。

要解决此问题,您必须在 startRestTimer() 中启动一个新计时器而不是循环(根据您的代码,它在计时器后的 onFinish() 和 运行 中完成)当 NUMBER_OF_SETS > 0 并递减 NUMBER_OF_SETS.

所以,会运行一个接一个。

希望对您有所帮助。