我在处理OnSaveInstanceState
/OnRestoreInstanceState
对时有些问题。据说是为了暂时保存状态,最好的例子是手机旋转时。这部分对我很有用。
然而OnSaveInstanceState
,当应用程序简单地退出时也会调用。几个小时后,我启动了应用程序(从我的角度来看,这是一个新的运行),令我惊讶的是 Android 调用OnRestoreInstanceState
并能够挖掘出状态的“旧”值。
这破坏了我的逻辑,因为我当前的代码假设这对仅在应用程序持续运行时(从用户的角度)被调用,所以在第二种情况下,我的应用程序的一半表现得像刚刚启动(正确),而另一半表现得像它是在处理一些数据的过程中(因为它从保留状态中获取了这些值;这不是故意的)。
当然我可以破解它并完全放弃这对并在应用程序实例中使用全局值,但我想知道如何在不使用大枪的情况下正确/温和地做到这一点?
更新:发生的重要事件:
- 我的应用程序的第一次运行
- 屏幕是否旋转
- 我的应用程序通过 OnPause 或其他什么,关键是它通过
OnSaveInstanceState
- 一段时间过去了
- 我再次运行该应用程序,在日志中我看到调用了应用程序构造函数(据我所知,一切都是全新创建的)
- 在新的应用程序实例活动中调用 OnCreate/OnResume/etc
- 其中
OnRestoreInstanceState
也被调用,并且它的 bundle 实例不为空——这意味着临时状态实例跨越了应用程序(不仅仅是活动)的生命周期(这让我担心)
姜饼 2.3。
目前我最终使用了存储在应用程序中的全局变量,因为它在每次启动时都会重新创建,但在屏幕旋转时会保留它的行为,就像我预期的那样。