проблемы действия onPause/onResume

У меня есть маленькое тестовое приложение, я работаю, на котором имеет таймер, который обновляет 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 запускается. Почему переменная становится сброшенной? Я думал, что приложение продолжит работать в фоновом режиме с теми же значениями. Я пропускаю что-то? Это все объявляется в классе, который расширяет Действие.

Заранее спасибо!

Примечание: Отредактированный для чистки копирования кода

14
задан Blather 14 March 2010 в 04:19
поделиться

2 ответа

Если вы посмотрите на диаграмму для жизненного цикла активности , вы поймете, что нет никаких гарантий относительно вашей активности после того, как onPause будет называется. Android может убить вас Activity, даже не вызывая onDestroy. Вы должны сохранить свое состояние с помощью onSaveInstanceState и восстановить его с помощью onRestoreInstanceState .

Это может быть полезно.

РЕДАКТИРОВАТЬ:

Жизненный цикл охватывает различные сценарии. Если у вас есть только одно действие, нажатие кнопки «Назад» эквивалентно выходу из приложения. Если у вас есть действие A, которое запускает действие B, то onSaveInstanceState вызывается для действия A. Когда вы нажимаете обратно в Activity B, оно просто завершается, а onRestoreInstanceState вызывается для действия A. Вы пытаетесь сохранить данные между двумя отдельными запусками вашего приложения, и вы для этого необходимо использовать какое-то постоянное хранилище .

16
ответ дан 1 December 2019 в 13:21
поделиться

Вы можете просто записать тайм-аут в базу данных или файл в onPause и прочитать его обратно в onResume.

0
ответ дан 1 December 2019 в 13:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: