我正在制作一个重复的倒计时器app.I要求倒数计时器以不同的时间重新启动。我在倒数计时器的构造函数中使用全局变量。但问题是它始终从启动时重新启动第一个给定的间隔。
public void chance(final int tota, final int cur, final int exercise,int pass,int flag)
{
Log.i("inside value","reached");
a = new CountDownTimer((tempmilliseconds) * 1000 + 100, 1000) {
@Override
public void onTick(long millisUntilFinished) {
tempmilliseconds = (int) millisUntilFinished / 1000;
Log.i("inside value",Integer.toString(tempmilliseconds));
updatetimer(millisUntilFinished);
}
@Override
public void onFinish() {
mtext.setText("0:00");
cancel();
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
currentcompleted++;
if (on == 0) {
on = 1;
int exercis = MainActivity.restmint * 60 + MainActivity.restsec;
tempmilliseconds=exercis;
chance(tota, curr + 1, exercis, 0, 0);
} else {
on = 0;
int exercis = MainActivity.exermint * 60 + MainActivity.exersec;
tempmilliseconds=exercis;
chance(tota, curr + 1, exercis, 0, 0);
}
}
}, 1000);
}
};
a.start();
}
以下是恢复操作的代码:
public void resume(View view) {
Button mytext=(Button) findViewById(R.id.resume);
if( mytext.getText().toString()=="Pause") {
mytext.setText("Play");
a.cancel();
}
else {
mytext.setText("Pause");
Log.i("Value of temp",Integer.toString(tempmilliseconds));
a.start();
}
}
计时器正在停止,但在恢复功能启动时,会以原始时间重新启动,而不是由tempmillisecond指定。注意tempmilliseconds每秒更新一次。 任何帮助/片段/建议表示赞赏。谢谢!
答案 0 :(得分:0)
在任何情况下,CountDownTimer
都不会让自己受到干扰。它将记住它诞生的时间直到有人杀死它。
如果您查看其文档,您会发现它直接继承自Object
类,并且只有四种方法:start()
,cancel()
,onFinish()
(摘要)和onTick()
(摘要)。几乎就是这样。所以,你基本上别无选择,只能拨打cancel()
,然后重新初始化计时器。或者,您可以扩展CountDownTimer
类并将其封装在引擎盖下。
在任何一种情况下,取消广告重新初始化的成本可能会变得乏味。