在Android中,您需要实现以下活动方法,以便在操作系统决定销毁然后重新创建您的活动时,您的应用程序可以恢复到以前的状态:
public void onSaveInstanceState(Bundle savedInstanceState)
public void onRestoreInstanceState(Bundle savedInstanceState)我见过的实现这些方法的例子是在Bundle对象上使用put/getBoolean、put/getInt等来保存应用程序状态。这似乎是一种非常容易出错的保存状态的方法,而且我不明白如何在不编写大量代码的情况下将其扩展到存储复杂的对象。
要以一种健壮且易于实现的方式存储/恢复状态,我有哪些选择?
在重要的情况下,我的应用程序(游戏)需要存储大约50个对象,每个对象可能存储5个浮点变量和一些对其他对象的引用。我并不特别想为我使用的每个类和子类(可能有15个)编写保存/恢复方法。如果我能把所有与状态相关的对象都放在一个名为" state“的对象中,然后在"state”上调用save/load来处理所有事情,那就太好了。
使用Java序列化是一种选择吗?我听说它非常慢,但这对保存/恢复有问题吗?我可以把我的数据写到SD卡上吗?到数据库吗?
发布于 2010-02-20 03:22:17
看看Bundle类,它支持存储Parcelable和Serializable。因此,如果您为状态对象实现了这些接口中的一个,那么您应该已经准备好了。
发布于 2011-10-13 17:14:43
还可以看看onRetainNonConfigurationInstance和getLastNonConfigurationInstance。它们允许您在活动未运行时让操作系统引用您的对象,并在重新创建活动时将其取回。两个方法中的第一个方法是重写,第二个方法应在onCreate中调用。请注意,它们已被弃用,但在新的android版本中还有其他等效的方法可用。另请注意,文档中说
应仅用作优化
,否则您必须准备好恢复您的状态。
另一种将对象保留在内存中的方法是将Application类派生为子类,如this article中所述。
https://stackoverflow.com/questions/2298889
复制相似问题