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

我的程序中有两个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)提交任何内容时,应用程序崩溃? 比如,我可以让应用程序在没有强制停止的情况下继续吗?

提前谢谢了。

在代码中创建单独的方法来启动/暂停/恢复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); }