检查CountDownTimer是否正在运行

23

我一直在寻找一种方法来判断CountDownTimer是否正在运行,但是我找不到任何方法。如果有帮助的话,将不胜感激。

if (position == 0) {

    mCountDown = new CountDownTimer((300 * 1000), 1000) {

        public void onTick(long millisUntilFinished) {
            mTextField.setText("seconds remaining: "
                    + millisUntilFinished / 1000);
        }

        public void onFinish() {
            mTextField.setText("0:00");
            String path = "/sdcard/Music/ZenPing.mp3";
            try {

                mp.reset();
                mp.setDataSource(path);
                mp.prepare();
                mp.start();

            } catch (IOException e) {
                Log.v(getString(R.string.app_name),
                        e.getMessage());
            }
        }
    }.start();

}

那我该如何检查 mCountDown 是否正在运行?


你不能使用一个全局布尔值吗?在调用新的CountDownTimer时设置为TRUE,在onFinish()中设置为FALSE。 - Damien R.
你能详细说明你想要实现什么吗? - MGDroid
3
请注意,在onTick()和onFinish()方法中使用布尔变量来指示定时器状态并不清晰。因为您可以通过cancel()方法停止计时器,此时您的变量仍然为true并指示错误的状态。 - Максим Петлюк
4个回答

59

只需在以下代码中加入一个指示布尔值的标志:

boolean isRunning = false;

mCountDown = new CountDownTimer((300 * 1000), 1000) {

    public void onTick(long millisUntilFinished) {
        isRunning = true;
        //rest of code
    }

    public void onFinish() {
        isRunning= false;
        //rest of code
    }
}.start();

6
这个解决方案并不完全准确,因为调用 mCountDown.cancel() 不会触发 onFinish(),因此 isRunning 仍然为 true,但计时器实际上已经停止了。 - Cris
1
正如@Cris所提到的,每当您调用mCountDown.cancel()时,应调用isRunning = false - musooff

3

onTick是一个正在运行的进程的回调函数,您可以设置一个属性来跟踪其状态。

isTimerRunning =false;

start -> 将其设置为真;OnTick -> 将其设置为真(实际上不需要,但是作为双重检查) 在OnFinish -> 将其设置为假;

使用isTimerRunning属性跟踪状态。


0
onFinish()中设置mCountDown = null将保存一个标志。为了检查它是否正在运行,可以使用if (mCountDown != null)

0

检查CountDownTimer是否正在运行,以及应用程序是否在后台运行。

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    myButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            myButton.setText("Button clicked");
            countDownTimer = new CountDownTimer( 3000, 1000) {
                @Override
                public void onTick(long millisUntilFinished) {
                    //After turning the Smartphone the follow both methods do not work anymore
                    if (!runningBackground) {
                        myButton.setText("Calc: " + millisUntilFinished / 1000);
                        myTextView.setText("Calc: " + millisUntilFinished / 1000);
                    }
                }
                @Override
                public void onFinish() {
                    if (!runningBackground) {
                        //Do something
                    }
                    mTextMessage.setText("DONE");
                    runningBackground = false;
                    running = false;
                }
            };
            //timer started
            countDownTimer.start();
            running = true;
        }
    });
}

@Override
protected void onResume() {
    super.onResume();
    runningBackground = false;
}

@Override
protected void onPause() {
    runningBackground = true;
    super.onPause();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接