onPause/onResume活动问题

Bla*_*her 14 android timer

我有一个小的测试应用程序我正在使用它有一个计时器,将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();
}
Run Code Online (Sandbox Code Playgroud)

start_timer()方法创建一个CountDownTimer,它更新onTick方法中的textview并更新this._timer_time_remaining int变量.

CountDownTimer和_timer_time_remaining都在类级别声明,如下所示:

private CountDownTimer timer;
private int _timer_time_remaining;
Run Code Online (Sandbox Code Playgroud)

从Log.v()打印我看到_timer_time_remaining变量在调用onPause时存储了正确的秒数,但是在onResume启动时它被设置回0.为什么变量会被重置?我认为应用程序将继续在后台运行相同的值.我错过了什么吗?这都是在扩展Activity的类中声明的.

提前致谢!

注意:编辑清理代码复制

Nik*_*nić 16

如果您查看Activity生命周期的图表,您将意识到在调用onPause之后无法保证您的Activity.Android甚至可以在不调用onDestroy的情况下杀死你.您必须使用onSaveInstanceState保存状态并使用onRestoreInstanceState恢复它.

可能很有用.

编辑:

生命周期涵盖不同的场景.如果您只有一个活动,则按返回相当于退出您的应用程序.如果您有活动A,它启动活动B,则为活动A调用onSaveInstanceState.当您在活动B中按回来时,它只退出并为活动A调用onRestoreInstanceState.您试图在应用程序的两个不同运行之间保存数据需要为此使用某种持久存储.