问题描述
我正在开发一个简单的任务,其中我想使倒计时计时器在我的应用停止和关闭时仍在后台运行。并且所有这些工作都应该在不使用android服务的情况下完成... 这是我正在使用的代码。在这段代码中,当我最小化我的应用程序时,时间会一直在后台运行。但是,当我关闭我的应用程序时,它会从头开始,这不适合我...我希望时间一直持续到我关闭我的应用程序。
public class MainActivity extends AppCompatActivity {
private static long START_TIME_IN_MILLIS = 90000;
private TextView mTextViewCountDown;
private Button mButtonStartPause;
private Button mButtonReset;
private CountDownTimer mCountDownTimer;
private boolean mTimerRunning;
private long mTimeLeftInMillis;
private long mEndTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextViewCountDown = findViewById(R.id.text_view_countdown);
mButtonStartPause = findViewById(R.id.button_start_pause);
mButtonReset = findViewById(R.id.button_reset);
startTimer();
}
private void startTimer() {
mEndTime = System.currentTimeMillis() + START_TIME_IN_MILLIS;
mCountDownTimer = new CountDownTimer(START_TIME_IN_MILLIS,1000) {
@Override
public void onTick(long millisUntilFinished) {
START_TIME_IN_MILLIS = millisUntilFinished;
updateCountDownText();
}
@Override
public void onFinish() {
mTimerRunning = false;
}
}.start();
mTimerRunning = true;
}
private void updateCountDownText() {
int minutes = (int) (START_TIME_IN_MILLIS / 1000) / 60;
int seconds = (int) (START_TIME_IN_MILLIS / 1000) % 60;
String timeLeftFormatted = String.format(Locale.getDefault(),"%02d:%02d",minutes,seconds);
mTextViewCountDown.setText(timeLeftFormatted);
}
@Override
protected void onStop() {
super.onStop();
SharedPreferences prefs = getSharedPreferences("prefs",MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putLong("millisLeft",START_TIME_IN_MILLIS);
editor.putBoolean("timerRunning",mTimerRunning);
editor.putLong("endTime",mEndTime);
editor.apply();
if (mCountDownTimer != null) {
mCountDownTimer.cancel();
}
}
@Override
protected void onStart() {
super.onStart();
SharedPreferences prefs = getSharedPreferences("prefs",MODE_PRIVATE);
START_TIME_IN_MILLIS = prefs.getLong("millisLeft",START_TIME_IN_MILLIS);
mTimerRunning = prefs.getBoolean("timerRunning",false);
updateCountDownText();
mEndTime = prefs.getLong("endTime",mEndTime);
START_TIME_IN_MILLIS = mEndTime - System.currentTimeMillis();
Comm.endTime = (int) START_TIME_IN_MILLIS;
startTimer();
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)