仅一屏半持久化数据

Posted

技术标签:

【中文标题】仅一屏半持久化数据【英文标题】:Semi-persisting data for one screen only 【发布时间】:2013-05-11 03:33:23 【问题描述】:

我正在做的是一个简单的游戏,当被击败时,它会进入一个新的活动,在那里它启动一个 AsyncTask 并将用户分数提交给服务器,服务器以一系列分数响应(比我好一点,比我差一点比我)。

我想要做的是持久化这个数组,但只针对这个屏幕,然后用户存在特定的屏幕数据将被遗忘。游戏总是横向的,所以我不需要担心屏幕旋转,但是用户可以跳出应用程序,当他回来并且应用程序没有被杀死时,它应该恢复到那个屏幕,就像它一样,但是数据已经消失了(并且异步任务再次开始),所以我想我需要以某种方式持久化该数据,但将其写入数据库似乎太多了,因为我需要担心首先删除它等等等等。

所以我想知道,在这种情况下,您会使用哪种技术来持久化数据?作为 Application 对象中的成员变量?临时表?保存的实例(即使将 arraylist 放入 savedInstanceState 会很痛苦)

谢谢!

【问题讨论】:

也许是 SharedPreferences? arrayList是什么样的? 【参考方案1】:

我建议使用onSaveInstanceState。这是为此类情况设计的。

其实这并不痛苦。在onCreate 中使用putParcelableArrayList 和更高版本的getParcelableArrayList。

如果您的数据类就像持有String(姓名)和int(分数)一样简单,那么如果您之前没有实现过,那么Parcelable 是一个很好的练习。

【讨论】:

是的,这就是我想要使用的,但不知何故,savedInstance 为空,我想我必须寻找其他方法来解决这个问题 @VlastoBennyLava in onCreate(Bundler savedInstance) savedInstance 将第一次为空。在您旋转手机或重新创建流程后,它将包含之前添加到 onSaveInstanceState 中的数据。【参考方案2】:

在某些时候你的问题不清楚。

我想要做的是持久化这个数组,但只针对这个屏幕, 那么用户存在特定的屏幕数据将被遗忘。

通过这一行,您似乎仅在活动运行时(在前台或后台)才保留数据。所以在这种情况下,不需要将数据存储在其他地方而不是类变量。因此,如果这是您想要的,那么您可能正在 onResume 中调用 asynctask。所以在这种情况下调用 onCreate 中的 asynctask。

但是,如果您想在应用程序关闭后仍然保留数据,那么您可以使用 SharedPreferences 来存储数组。

如果您可以发布代码,将更容易了解您的问题。

【讨论】:

好吧,如果活动进入后台,它可能会被破坏,所以类变量不好。我想我会使用 savedInstanceState 但由于某种原因它现在对我来说是空的。非常感谢您的意见。

以上是关于仅一屏半持久化数据的主要内容,如果未能解决你的问题,请参考以下文章

android dialog设置全屏半透明背景色

redis持久化

刚刚问我,redis持久化数据到数据库是怎么操作的

Kubernetes 数据持久化之Configmap

redis 数据持久化

数据持久化方案解析(八) —— UIDocument的数据存储(一)