在没有服务的情况下继续在后台运行CountdownTimer

问题描述

我正在开发一个简单的任务,其中我想使倒计时计时器在我的应用停止和关闭时仍在后台运行。并且所有这些工作都应该在不使用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 (将#修改为@)