1

我正在编写的一个 android 应用程序出现问题,这似乎应该是一个常见问题,但我找不到任何相关信息。

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

问题是每次他们离开和回来时,整个活动都会重置,失去所有分数。我不能使用 saveInstanceState ,因为按下后退键时不会调用它。除了在共享首选项中保存整个网格之外,我真的不知道从哪里开始,但我觉得必须有更好的方法

有任何想法吗?

4

2 回答 2

1

一般情况下,需要在 onPause() 中保存任何状态信息,并在 onResume() 中恢复。

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

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

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

于 2013-07-06T06:57:08.597 回答
1

愿这对你有帮助

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

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

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

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

于 2013-07-06T07:01:52.347 回答