我有一个倒数计时器,它接受一个长参数,然后显示该时间的倒计时。当我点击后退按钮并退出应用程序时,我希望倒数计时器的剩余时间保存在onStop()方法的共享偏好中。当我重新打开应用程序时,我想将剩余时间作为参数并再次启动计时器,直到它达到0。
我遇到了麻烦,因为如果我的参数是2,那么倒数计时器会从1分59秒开始倒计时。当我退出应用程序并重新打开应用程序时,它仍然显示1分钟和59秒。倒数计时器不会减去剩余的时间。它只显示输入的时间。
private void startTimer() {
countDownTimer = new CountDownTimer(timee*60000 , 1000) {
@Override
public void onTick(long l) {
tv.setText(simpleDateFormat.format(l));
timesLeft = l;
}
@Override
public void onFinish() {
tv.setText("00:00:00");}
}.start();
这是onStop()和onStart();
protected void onStart() {
super.onStart();
SharedPreferences sPrefs = getSharedPreferences("sharedPreferences", MODE_PRIVATE);
if(1>0){
long s = sPrefs.getLong("sysstoptime", 0);
long tt = sPrefs.getLong("timeleft", 0);
long currenttime = System.currentTimeMillis();
long k = sPrefs.getLong("timeset", 0);
s = s+tt;
timee = (s-currenttime)/60000+1;
startTimer();}
else {
Toast t5 = Toast.makeText(this, "less than or equal 0", Toast.LENGTH_LONG);
t5.show();
}
}
@Override
protected void onStop() {
super.onStop();
SharedPreferences sPrefs = getSharedPreferences("sharedPreferences", MODE_PRIVATE);
SharedPreferences.Editor editor = sPrefs.edit();
editor.putLong("sysstoptime", System.currentTimeMillis());
editor.putLong("timeleft", timesLeft);
editor.putLong("timeset", timeset);
editor.apply();
}
我想要做的是当倒数计时器正在运行并且我要离开应用程序时,我正在使用System.currenttimeinmillis +倒数计时器的剩余时间。那是变量s + tt。 然后我等到s + tt的剩余时间--System.currenttimeinmillis,有倒数计时器,倒计时剩下的剩余时间,包括应用程序关闭/停止的时间。 然后我调用方法startTimer();用我的新参数timee。但它并没有显示剩余时间,而是显示我退出并进入应用程序时输入的相同时间。
timee是长变量,用户选择时间,以分钟为单位。因此,如果timee = 10,则表示10分钟,倒数计时器将从09:59开始计算
答案 0 :(得分:0)
首先,当您获得倒计时的价值时,按下开始按钮[或用于调用startTimer()的任何内容后,将其乘以60000。
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timee = YOUR_VALUE_TO_COUNTDOWN * 60000;
startTimer();
}
});
改变startTimer():
private void startTimer() {
countDownTimer = new CountDownTimer(timee, 1000) {
@Override
public void onTick(long l) {
tv.setText(simpleDateFormat.format(l));
timesLeft = l;
}
@Override
public void onFinish() {
tv.setText("00:00:00");
}
}.start();
}
更改onStop()
@Override
protected void onStop() {
super.onStop();
SharedPreferences sPrefs = getSharedPreferences("sharedPreferences", MODE_PRIVATE);
SharedPreferences.Editor editor = sPrefs.edit();
editor.putLong("timeleft", timesLeft);
editor.putLong("sysstoptime", System.currentTimeMillis());
editor.apply();
}
最后是onStart()
@Override
protected void onStart() {
super.onStart();
SharedPreferences sPrefs = getSharedPreferences("sharedPreferences", MODE_PRIVATE);
if(1>0){
timesLeft = sPrefs.getLong("timeleft", 0);
long stopTime = sPrefs.getLong("sysstoptime", 0);
long currentTime = System.currentTimeMillis();
timee = timesLeft - (currentTime - stopTime);
startTimer();
}
else {
Toast t5 = Toast.makeText(this, "less than or equal 0", Toast.LENGTH_LONG);
t5.show();
}
}