我正在制作简单的应用程序,显示问题,用户应在10秒内应答或单击下一步,当用户单击下一步时,将显示下一个问题并且计时器再次进入10秒。 我正在使用Asytask来处理时间计数器,但是当我点击下一个按钮时,显示下一个问题,但是计时器延迟大约2秒左右从10开始, 例如: 在屏幕上:显示问题1,剩余时间为8秒。 当我点击下一个按钮 显示问题2,但时间为8,然后在2或3秒后,时间变为10并开始减少: 我的问题是: 有没有更好的方法来处理这个?为什么当显示下一个问题时,时间会持续2或3秒,然后从10开始 这是我的代码:
// this method is called to reset the timer to 10 and display next
question
private void displynextquestion(){
// cancel the current thread .
decrease_timer.cancel(true);
decrease_timer =new Decrease_timer();
// execute again and set the timer to 10 seconds
decrease_timer.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,10);
// some code
}
private class Decrease_timer extends AsyncTask <Integer ,Integer,Void>{
@Override
protected Void doInBackground(Integer... integers) {
for (int i=integers[0];i>=0;i--){
publishProgress(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
timeview.setText(""+values[0]);
}
} }
答案 0 :(得分:0)
使用CountDownTimer,更容易:
CountDownTimer countDownTimer = new CountDownTimer(10000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
}
};
CountDownTimer构造函数中的第一个参数是以毫秒为单位的总时间,第二个参数是接收onTick(long)回调的时间间隔。
要重新启动,只需致电:
countDownTimer.cancel();
countDownTimer.start();
在https://developer.android.com/reference/android/os/CountDownTimer.html
中查看详情