2011-10-09 37 views
1

快速的问题。 我有一个活动,在适当的时刻onPause和onSavedInstance调用我的保存功能。 如果活动在被杀死之前离开前台和onSavedInstance,则会发生onPause。Android后退键不让我保存活动状态

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

问题是,当用户回到活动时,onCreate被称为含义(对于我所理解的),该类被实例化,因此其属性再次为空。 如果onSavedInstance在先前按下后退键时被调用,我可以用它来保存活动状态,但事实并非如此。

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

回答

1

当用户按下BACK按钮时,您的前景活动被破坏。该活动将以onPause()onStop()onDestroy()调用。那个活动对象将被垃圾回收(除非你引入了内存泄漏)。

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

你应该怎么做onPause(),如果有的话,是使用“sqlite,文件保存和其他持久性方法”来保存数据。一旦调用onPause(),就不能保证这个活动会停留,或者整个过程都会停滞不前。因此,你所看重的任何东西都应该写出来存储在永久存储器中。

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

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