Android后退键不让我保存活动状态

时间:2011-10-09 21:09:11

标签: android savestate android-activity

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

如果活动很快就会被销毁,但用户可能会导航回到它,那么

onSaveInstanceState()将被定期调用。突出的情况是在配置更改期间,例如旋转屏幕。

你应该在onPause()做什么,如果有的话,使用“sqlite,文件保存和其他持久性方法”来保存数据。调用onPause()后,无法保证此活动会一直存在,或者您的整个过程会一直存在。因此,任何你重视的东西都应该写入持久存储。

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

如果您关心的是性能,欢迎您将数据缓存在静态数据成员/单例中,假设您没有引入内存泄漏。但是,再次调用onPause()后,您的流程可能会在任何时间终止。您的静态数据成员只能是缓存;你的数据模型必须是持久性的。