首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Robust+easy保存/恢复安卓应用实例状态的方式

Robust+easy保存/恢复安卓应用实例状态的方式
EN

Stack Overflow用户
提问于 2010-02-20 03:11:08
回答 2查看 4.9K关注 0票数 3

在Android中,您需要实现以下活动方法,以便在操作系统决定销毁然后重新创建您的活动时,您的应用程序可以恢复到以前的状态:

代码语言:javascript
复制
public void onSaveInstanceState(Bundle savedInstanceState)
public void onRestoreInstanceState(Bundle savedInstanceState)

我见过的实现这些方法的例子是在Bundle对象上使用put/getBoolean、put/getInt等来保存应用程序状态。这似乎是一种非常容易出错的保存状态的方法,而且我不明白如何在不编写大量代码的情况下将其扩展到存储复杂的对象。

要以一种健壮且易于实现的方式存储/恢复状态,我有哪些选择?

在重要的情况下,我的应用程序(游戏)需要存储大约50个对象,每个对象可能存储5个浮点变量和一些对其他对象的引用。我并不特别想为我使用的每个类和子类(可能有15个)编写保存/恢复方法。如果我能把所有与状态相关的对象都放在一个名为" state“的对象中,然后在"state”上调用save/load来处理所有事情,那就太好了。

使用Java序列化是一种选择吗?我听说它非常慢,但这对保存/恢复有问题吗?我可以把我的数据写到SD卡上吗?到数据库吗?

EN

回答 2

Stack Overflow用户

发布于 2010-02-20 03:22:17

看看Bundle类,它支持存储ParcelableSerializable。因此,如果您为状态对象实现了这些接口中的一个,那么您应该已经准备好了。

票数 4
EN

Stack Overflow用户

发布于 2011-10-13 17:14:43

还可以看看onRetainNonConfigurationInstancegetLastNonConfigurationInstance。它们允许您在活动未运行时让操作系统引用您的对象,并在重新创建活动时将其取回。两个方法中的第一个方法是重写,第二个方法应在onCreate中调用。请注意,它们已被弃用,但在新的android版本中还有其他等效的方法可用。另请注意,文档中说

应仅用作优化

,否则您必须准备好恢复您的状态。

另一种将对象保留在内存中的方法是将Application类派生为子类,如this article中所述。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2298889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档