Как сохранить состояние таймера обратного отсчета, даже если приложение уничтожено?

Я создаю приложение, в котором есть таймер при нажатии кнопки, запускается таймер, и я хочу продолжить таймер, даже если я уничтожу свое приложение, я использую метод таймера обратного отсчета, как я могу сохранить его состояние? Я новичок

Просмотрите код и помогите мне

открытый класс Main2Activity расширяет AppCompatActivity {

private static final long START_TIME_IN_MILLIS = 60000;
private TextView mTextViewCountDown;
private Button button_claim;
private CountDownTimer mCountDownTimer;
CharSequence count;
private boolean mTimerRunning;
private long mTimeLeftInMillis = START_TIME_IN_MILLIS;
boolean clicked = false;
Calendar now = Calendar.getInstance();

public static final String PREFS_NAME = "MyTimer_Settings";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);


    mTextViewCountDown = findViewById(R.id.text_view_countdown);
    button_claim = findViewById(R.id.btn_claim);

    final int i1 = now.get(Calendar.MINUTE);
    final int i = now.get(Calendar.SECOND);


    count = mTextViewCountDown.getText();
    button_claim.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            clicked = true;
            if (mTimerRunning) {
                pauseTimer();
            } else {
                resetTimer();
                startTimer();
            }


        }
    });



    updateCountDownText();




}





/*************************************************************************************************/


@Override
protected void onStop() {
    super.onStop();
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);

    // Writing data to SharedPreferences
    SharedPreferences.Editor editor = settings.edit();
    editor.putLong("Timer",Long.parseLong(mTextViewCountDown.getText().toString()));
    editor.commit();

pauseTimer (); }

@Override
protected void onRestart() {
    super.onRestart();
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
    // Reading from SharedPreferences
    Long value = settings.getLong("Timer", 0);

    mTextViewCountDown.setText(String.valueOf(value));

}


/**Timer only */
private void startTimer() {
    mCountDownTimer = new CountDownTimer(mTimeLeftInMillis, 500) {
        @Override
        public void onTick(long millisUntilFinished) {
            mTimeLeftInMillis = millisUntilFinished;
            updateCountDownText();
        }

        @Override
        public void onFinish() {
            mTimerRunning = false;
            button_claim.setEnabled(true);
            button_claim.setClickable(true);
            button_claim.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
        }
    }.start();

    mTimerRunning = true;
    button_claim.setEnabled(false);
    button_claim.setClickable(false);
    button_claim.setBackgroundColor(getResources().getColor(R.color.colorGrey));


}





private void updateCountDownText() {

    int minutes = (int) (mTimeLeftInMillis / 1000) / 60;
    int seconds = (int) (mTimeLeftInMillis / 1000) % 60;

    String timeLeftFormatted = String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds);

    mTextViewCountDown.setText(timeLeftFormatted);
}

private void pauseTimer() {
    mCountDownTimer.cancel();
    mTimerRunning = false;
    button_claim.setEnabled(true);
    button_claim.setClickable(true);
}

private void resetTimer() {
    mTimeLeftInMillis = START_TIME_IN_MILLIS;
    updateCountDownText();
    button_claim.setEnabled(true);
    button_claim.setClickable(true);
}

}


person Hash    schedule 25.01.2018    source источник
comment
вы хотите просто сохранить состояние таймера или продолжить счет?   -  person Vladyslav Matviienko    schedule 25.01.2018
comment
Да, я хочу, чтобы это продолжалось, даже если я полностью закрою приложение   -  person Hash    schedule 26.01.2018
comment
затем предварительно рассчитайте время, когда ваш таймер закончится, и сохраните его в общих настройках. А когда снова откроете приложение - загрузите его, посчитайте, сколько осталось, и продолжите обратный отсчет.   -  person Vladyslav Matviienko    schedule 26.01.2018
comment
Можете ли вы дать мне образец кода для этого? Я попытался сохранить с общими настройками, но таймер запускается только с первого раза   -  person Hash    schedule 26.01.2018
comment
конечно, как только вы покажете свой код, я постараюсь это исправить. Но я не буду писать весь код.   -  person Vladyslav Matviienko    schedule 26.01.2018
comment
пожалуйста, посмотрите весь код, который я опубликовал   -  person Hash    schedule 27.01.2018


Ответы (1)


Если под уничтожением вы имеете в виду, что вы сосредоточены на другом приложении, вы можете просто использовать ключевое слово static для данных, которые хотите сохранить. Если вы имеете в виду уничтожить, принудительно закрывая приложение полностью, вы можете сохранить его в файл в методе onStop ().

person D. O.    schedule 25.01.2018
comment
пожалуйста, посмотрите мой код и скажите, какие изменения мне нужно сделать - person Hash; 27.01.2018