当另一个CountDown计时器运行时,如何暂停一个CountDown计时器?

时间:2016-10-17 19:08:47

标签: java android android-studio countdowntimer pause

我的程序中有两个CountDownTimers:一个4秒,一个24秒。我希望较长的计时器每隔4秒暂停一次,而较短的计时器正在运行。然后当短计时器结束时,长计时器开始倒计时。这是两个计时器的代码:

final CountDownTimer loop = new CountDownTimer(4000, 1000) {
                @Override
                public void onTick(long millisUntilFinished) {

                }
                @Override
                public void onFinish() {
                    number.setVisibility(View.GONE);
                    final TextView prompt = (TextView) findViewById(R.id.prompt);
                    prompt.setVisibility(View.VISIBLE);
                    prompt.setText(" Enter the number");
                    final EditText input = (EditText) findViewById(R.id.enterAnswer);
                    input.setVisibility(View.VISIBLE);
                    input.setOnKeyListener(new View.OnKeyListener() {
                        @Override
                        public boolean onKey(View v, int keyCode, KeyEvent event) {
                            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                                switch (keyCode) {
                                    case KeyEvent.KEYCODE_ENTER:
                                        Editable answer = input.getText();
                                        int finalAnswer = Integer.parseInt(String.valueOf(answer));
                                        int finalLoadG1 = Integer.parseInt(String.valueOf(number.getText()));
                                        input.setVisibility(View.GONE);
                                        prompt.setVisibility(View.GONE);
                                        if (finalAnswer == finalLoadG1) {
                                            score++;
                                        }

                                        number.setVisibility(View.VISIBLE);
                                        int loadG1 = generateG1.nextInt(1000000)+10000;
                                        number.setText(""+loadG1);
                                        input.getText().clear();

                                        start();

                                        return true;
                                    default:
                                }
                            }
                            return false;
                        }
                    });
                }
                }.start();


            new CountDownTimer(24000, 1000) {
                @Override
                public void onTick (long millisUntilFinished) {
                }
                @Override
                public void onFinish() {
                    TextView result = (TextView) findViewById(R.id.outcome);
                    result.setText("Score: "+ score);
                    TextView prompt = (TextView) findViewById(R.id.prompt);
                    prompt.setVisibility(View.GONE);
                    final EditText input = (EditText) findViewById(R.id.enterAnswer);
                    input.setVisibility(View.GONE);
                    loop.cancel();
                    number.setVisibility(View.GONE);
                }
            }.start();

我考虑过命名更长的计时器,然后在onTick中为更短的计时器添加name.pause()。问题是,因为较长的计时器是在较短的计时器之后写的,所以它的名称在初始化之前是不可识别的。 Java按顺序读取内容,对吗?或者是所有语言?

如果有人能帮助我,我会感激不尽。

作为任何能够回答的问题的一个侧面问题,当用户按下EditText(用于int)的输入时,是否有任何方法可以防止应用程序崩溃?比如,我可以让应用程序在没有强制停止的情况下继续吗?

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

在代码中创建单独的方法来启动/暂停/恢复24秒计时器。您需要存储您的milliTillFinished 24秒计时器,以便您可以将其传递给恢复计时器方法。您可以在4秒计时器的onTick()方法上暂停24秒计时器,并在onFinish()方法上恢复它。

启动计时器:

   public void timerStart(long timeLengthMilli) {
    timer = new CountDownTimer(timeLengthMilli, 1000) {

        @Override
        public void onTick(long milliTillFinish) {
            milliLeft=milliTillFinish;
        }

暂停计时器:

public void timerPause() {
    timer.cancel();
}

恢复计时器:

private void timerResume() {
    timerStart(milliLeft);
}