1

快速提问。我有一个活动在适当的时候调用我的保存函数,onPause 和 onSavedInstance。如果活动在被杀死之前离开前台和 onSavedInstance,则会发生 onPause。

如果用户按下“home”键,我的活动将完美保存状态,但如果他按下“返回”键,onPause 仍然会发生,因此某些字段会保存在活动类属性中。

问题是当用户返回活动时, onCreate 被称为意味着(据我所知)类已实例化,因此其属性再次为空。如果在之前按下后退键时调用了 onSavedInstance,我可以使用它来保存活动状态,但事实并非如此。

所以我的问题是,当用户按下返回键时,如何在不使用 sqlite、文件保存和其他持久性方法的情况下保存活动状态?

4

1 回答 1

1

当用户按下 BACK 按钮时,您的前台活动被破坏。该活动将使用onPause()onStop()和调用onDestroy()。然后该活动对象将被垃圾收集(除非您引入了内存泄漏)。

onSaveInstanceState()如果活动有可能很快被销毁,但会以用户可以导航回它的方式被定期调用。最突出的情况是在配置更改期间,例如旋转屏幕。

如果有的话,您应该做的onPause()是使用“sqlite、文件保存和其他持久性方法”来持久化数据。一旦onPause()被调用,不能保证这个活动会持续存在,或者你的整个过程会持续存在。因此,您重视的任何内容都应写入持久存储。

“状态”onSaveInstanceState()将是影响活动 UI 但不是持久数据模型的一部分的事物。其中大部分是由该方法的 Android 内置实现自动为您处理的(例如, 中的文本),但如果您愿意EditText,您可以添加自己的信息。Bundle但是,您的实例状态不是您的数据模型,因此您想要保留的任何内容都需要写入持久存储。

如果您关心的是性能,欢迎您在静态数据成员/单例中缓存数据,假设您不会引入内存泄漏。但是,同样,一旦onPause()被调用,您的进程可能会在任何时间点终止。您的静态数据成员只能是缓存;您的数据模型必须是持久的。

于 2011-10-09T21:28:55.317 回答