gpt4 book ai didi

android - onPause/onResume Activity 问题

转载 作者:可可西里 更新时间:2023-11-01 19:03:47 24 4
gpt4 key购买 nike

我有一个正在处理的小型测试应用程序,它有一个计时器,可以将 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,它在 onTick 方法中更新 textview 并更新 this._timer_time_remaining int 变量。

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

private CountDownTimer timer;
private int _timer_time_remaining;

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

提前致谢!

注意:编辑以清理代码复制

最佳答案

如果您看一下 Activity lifecycle 的图表您会意识到在调用 onPause 后无法保证您的 Activity。 Android 甚至可以在不调用 onDestroy 的情况下杀死你的 Activity。您必须使用 onSaveInstanceState 保存您的状态并使用 onRestoreInstanceState 恢复它.

This可能会有用。

编辑:

生命周期涵盖不同的场景。如果你只有一个 Activity,按 Back 相当于退出你的应用程序。如果您有启动 Activity B 的 Activity A,则为 Activity A 调用 onSaveInstanceState。当您在 Activity B 中按回它只是退出并且为 Activity A 调用 onRestoreInstanceState。您正在尝试在应用程序的两次不同运行之间保存数据,并且您需要使用某种 persistent storage为此。

关于android - onPause/onResume Activity 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2441145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com