如何区分OnRestoreInstanceState的路径?

How to tell the difference of the path of OnRestoreInstanceState?

我在处理 OnSaveInstanceState/OnRestoreInstanceState 对时遇到了一些问题。据说是为了临时保存状态,最好的例子就是phone旋转的时候。这部分很适合我。

然而,当应用程序简单退出时,也会调用 OnSaveInstanceState。几个小时后我启动应用程序(从我的角度来看它是一个新的 运行),令我惊讶的是 Android 调用 OnRestoreInstanceState 并且能够挖掘出状态的“旧”值。

这破坏了我的逻辑,因为我当前的代码假定仅当应用程序 运行 不断(从用户角度来看)时才调用这对,因此在第二种情况下,我的应用程序的一半表现得就像刚启动一样(正确),而另一半的行为就像它正在处理某些数据(因为它从保留状态获得了这些值;这不是故意的)。

当然我可以破解它并完全放弃这对并在应用程序实例中使用全局值,但我想知道如何在不使用大枪的情况下做到这一点correctly/gently?

更新:发生的重要事件:

姜饼 2.3.

目前我最终使用存储在应用程序中的全局变量,因为它在每次启动时重新创建,但在屏幕旋转时保留它的行为符合我的预期。

Several hours later I start app (from my perspective it is a new run), and to my surprise Android calls OnRestoreInstanceState and is able to dig out "old" values of the state.

在 Android 的现代版本中,保存的实例状态只有大约 30 分钟,而不是几个小时。但是,这仍然可能是在您的应用程序处于后台时终止您的进程之后,以释放系统 RAM。

I wonder how to do it correctly/gently without using big guns?

仅将保存的实例状态 Bundle 用于 process-termination 场景。

对于配置更改,如果您正在使用 Android 的现代版本,您将使用 ViewModel。您的“Gingerbread 2.3”表明您正在进行逆向计算,并且目前很少有库支持这样一个旧的 OS 版本。对于 API 级别 10 的纯 Android SDK 解决方案,您将使用 onRetainNonConfigurationInstance()getLastNonConfigurationInstance()ViewModel 是(间接地)建立在这些方法之上的。