快速提问。 我有一个活动在适当的时刻调用我的保存功能,onPause和onSavedInstance。 如果活动在被杀死之前离开前景,则发生onPause。
如果用户按下“主页”键,但是如果他按下,我的活动将完美地保存状态 “返回”键仍然会发生onPause,因此保存了一些字段 活动类属性。
问题在于,当用户返回活动时,onCreate被调用意义(据我所知),该类被实例化,因此其属性再次为null。 如果在先前按下后退键时调用了onSavedInstance,我可以用它来保存活动状态,但事实并非如此。
所以我的问题是,当用户按下后退键时,如何使用sqlite,文件保存和其他持久性方法保存活动状态?
答案 0 :(得分:1)
当用户按下BACK按钮时,前景活动将被破坏。将使用onPause()
,onStop()
和onDestroy()
来调用该活动。然后,该活动对象将被垃圾收集(除非您引入了内存泄漏)。
onSaveInstanceState()
将被定期调用。突出的情况是在配置更改期间,例如旋转屏幕。
你应该在onPause()
做什么,如果有的话,使用“sqlite,文件保存和其他持久性方法”来保存数据。调用onPause()
后,无法保证此活动会一直存在,或者您的整个过程会一直存在。因此,任何你重视的东西都应该写入持久存储。
onSaveInstanceState()
的“状态”会影响活动的UI,但不属于持久数据模型。其中大部分是由Android内置的该方法实现自动处理的(例如EditText
中的文本),但如果您愿意,可以将自己的信息添加到Bundle
。但是,您的实例状态不是您的数据模型,因此您想要留下的任何内容都需要写入持久存储。
如果您关心的是性能,欢迎您将数据缓存在静态数据成员/单例中,假设您没有引入内存泄漏。但是,再次调用onPause()
后,您的流程可能会在任何时间终止。您的静态数据成员只能是缓存;你的数据模型必须是持久性的。