当另一个正在运行时,如何暂停一个倒数计时器?
Posted
技术标签:
【中文标题】当另一个正在运行时,如何暂停一个倒数计时器?【英文标题】:How can I pause one CountDown Timer when another one is running? 【发布时间】:2017-02-26 21:06:21 【问题描述】:我的程序中有两个 CountDownTimer:一个 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();
我考虑过命名较长的计时器,然后将 name.pause() 放在 onTick 中以获得较短的计时器。问题是,因为较长的计时器是在较短的计时器之后写入的,所以在初始化之前它的名称无法识别。 Java 是按顺序读取的,对吗?还是所有语言都这样?
如果有人可以帮助我,我将不胜感激。
作为任何能够回答的人的一个附带问题,当用户在 EditText(用于 int)上按 Enter 键以不提交任何内容时,是否有任何方法可以防止应用程序崩溃?比如,我可以让应用继续运行而不强制停止吗?
非常感谢。
【问题讨论】:
而不是new CountDownTimer
,您应该创建一个扩展倒数计时器的类。然后它可以在你较短的里面访问......
【参考方案1】:
在您的代码中创建单独的方法来启动/暂停/恢复 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);
【讨论】:
希望这会有所帮助:) 在我的帖子中,我明确指出我不能在 4 秒内暂停或启动 24 秒计时器。下次请仔细阅读。以上是关于当另一个正在运行时,如何暂停一个倒数计时器?的主要内容,如果未能解决你的问题,请参考以下文章