У меня есть маленькое тестовое приложение, я работаю, на котором имеет таймер, который обновляет textview к обратному отсчету от 100 до 0. Это хорошо работает, но теперь я пытаюсь приостановить приложение, если пользователь нажимает кнопку "Назад" по телефону, и затем перезапустите таймер от того, где они кончили, когда они вновь открыли приложение. Вот код, который я использую:
@Override
public void onPause()
{
if(this._timer_time_remaining > 0) {
this.timer.cancel();
}
super.onPause();
Log.v("Pausing", String.format("Pausing with %d", this._timer_time_remaining));
}
@Override
public void onResume()
{
Log.v("Resuming", String.format("Resuming with %d", this._timer_time_remaining));
if(this._timer_time_remaining > 0) {
start_timer(this._timer_time_remaining);
}
super.onResume();
}
start_timer () метод создает CountDownTimer, который обновляет textview в окружающем методе и обновляет это. _ timer_time_remaining международная переменная.
CountDownTimer и _timer_time_remaining оба объявляются на уровне класса как это:
private CountDownTimer timer;
private int _timer_time_remaining;
От Log.v () печатает, я вижу, что _timer_time_remaining переменная имеет корректное число секунд, сохраненных, когда onPause называют, но это задержано к 0, когда onResume запускается. Почему переменная становится сброшенной? Я думал, что приложение продолжит работать в фоновом режиме с теми же значениями. Я пропускаю что-то? Это все объявляется в классе, который расширяет Действие.
Заранее спасибо!
Примечание: Отредактированный для чистки копирования кода
Если вы посмотрите на диаграмму для жизненного цикла активности , вы поймете, что нет никаких гарантий относительно вашей активности после того, как onPause будет называется. Android может убить вас Activity, даже не вызывая onDestroy. Вы должны сохранить свое состояние с помощью onSaveInstanceState и восстановить его с помощью onRestoreInstanceState .
Это может быть полезно.
РЕДАКТИРОВАТЬ:
Жизненный цикл охватывает различные сценарии. Если у вас есть только одно действие, нажатие кнопки «Назад» эквивалентно выходу из приложения. Если у вас есть действие A, которое запускает действие B, то onSaveInstanceState вызывается для действия A. Когда вы нажимаете обратно в Activity B, оно просто завершается, а onRestoreInstanceState вызывается для действия A. Вы пытаетесь сохранить данные между двумя отдельными запусками вашего приложения, и вы для этого необходимо использовать какое-то постоянное хранилище .
Вы можете просто записать тайм-аут в базу данных или файл в onPause и прочитать его обратно в onResume.