如何在后退按键上保存android上的活动状态

时间:2013-07-06 06:52:22

标签: android android-activity state-saving

我有一个Android应用程序的问题我写作似乎应该是一个常见问题,但我无法找到相关信息。

我的应用中有一个记分板活动,只是在文本视图中存储分数网格,它是用户将更新的东西,然后点击后退键并查看其他一些活动,然后来稍后回来更新它,再离开等等......

问题在于,每次他们离开并返回时,整个活动都会重置,失去所有分数。我无法使用saveInstanceState,因为在按下后退键时不会调用它。我真的不知道从这里去哪里除了在共享偏好中保存thew hole网格,我觉得必须有更好的方法

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

通常,您需要在onPause()中保存任何状态信息,并在onResume()中恢复它。

我的印象是,关闭应用程序时会自动保存各种状态信息,并在重新启动时自动恢复自身(直到Android从内存中删除应用程序以腾出空间,调用onDestroy())。

如果我是你,我会将网格存储在SharedPreference中。它确实是最可靠的解决方案。

您还可以使用本主题中的详细信息: https://stackoverflow.com/a/151940/503508

答案 1 :(得分:1)

这可以帮助你

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

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

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

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