仅一屏半持久化数据
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 inonCreate(Bundler savedInstance)
savedInstance
将第一次为空。在您旋转手机或重新创建流程后,它将包含之前添加到 onSaveInstanceState
中的数据。【参考方案2】:
在某些时候你的问题不清楚。
我想要做的是持久化这个数组,但只针对这个屏幕, 那么用户存在特定的屏幕数据将被遗忘。
通过这一行,您似乎仅在活动运行时(在前台或后台)才保留数据。所以在这种情况下,不需要将数据存储在其他地方而不是类变量。因此,如果这是您想要的,那么您可能正在 onResume 中调用 asynctask。所以在这种情况下调用 onCreate 中的 asynctask。
但是,如果您想在应用程序关闭后仍然保留数据,那么您可以使用 SharedPreferences 来存储数组。
如果您可以发布代码,将更容易了解您的问题。
【讨论】:
好吧,如果活动进入后台,它可能会被破坏,所以类变量不好。我想我会使用 savedInstanceState 但由于某种原因它现在对我来说是空的。非常感谢您的意见。以上是关于仅一屏半持久化数据的主要内容,如果未能解决你的问题,请参考以下文章