保存/恢复Android应用实例状态的强大+简便方法

时间:2010-02-19 19:11:08

标签: java android serialization

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

public void onSaveInstanceState(Bundle savedInstanceState)
public void onRestoreInstanceState(Bundle savedInstanceState)

我见过的实现这些方法的例子是在Bundle对象上使用put / getBoolean,put / getInt等(仅限原始对象)来保存应用程序状态。这似乎是一种非常容易出错的方式来保存你的状态,并且我无法看到它如何在不编写大量代码的情况下扩展存储复杂对象。

我以强大且易于实施的方式存储/恢复状态有哪些选项?

如果它很重要,我的应用程序(一个游戏)需要存储大约50个对象,每个对象可能存储5个浮点变量,一些存储对其他对象的引用。我不是特别想要为我使用的每个类和子类(可能大约15个)编写保存/恢复方法。如果我可以将所有状态相关对象都粘贴在一个名为“state”的对象中,然后在“state”上调用save / load来处理所有内容,那将是理想的。

使用Java序列化是一个选项吗?我听说它很慢,但这是保存/恢复的问题吗?我可以把数据写入SD卡吗?到数据库?

2 个答案:

答案 0 :(得分:4)

查看Bundle课程,它支持存储ParcelableSerializable。因此,如果为状态对象实现其中一个接口,则应该全部设置。

答案 1 :(得分:0)

另请查看onRetainNonConfigurationInstancegetLastNonConfigurationInstance。它们允许您让对象被O.S.引用。当您的活动未运行时,并在重新创建时将其恢复。两个方法中的第一个是覆盖,第二个方法应在onCreate中调用。请注意,它们已被弃用,但新的Android版本中还有其他等效方法。 另请注意文档说

  

只能用作优化

,你必须准备好恢复你的状态。

另一种在内存中保留对象的方法是继承Application类,如this article中所述。