保存活动/片段状态自定义类

时间:2015-07-07 18:23:05

标签: android

我想知道在Android应用中旋转时是否存在保存自定义类的方法。 我想保存所有被调用的MatrixGame类的实例对象...有人可以帮助我吗?

由于

2 个答案:

答案 0 :(得分:1)

您应该序列化您的对象。您可以实施Parcelable或实施SerializableParcelable快几倍)。然后,您就可以将其放在Bundle onSaveInstanceState中,并在onCreateonRestoreInstanceState中恢复。

此外,您可以将对象序列化为String,例如json字符串。 另一种选择是将对象存储在数据库或文件中。这取决于你的需求。

如果您不想在屏幕旋转上重新创建此对象,可以通过在Activity中添加配置更改标记来更改AndroidManifest.xml的生命周期。如果我们在讨论Fragment,您可以调用setRetainInstance(true)以避免在轮播时重新进行片段重新创建。

答案 1 :(得分:1)

由于Fragment生命周期是独立的 - 当您使用Fragment时,您可以设置它以便在配置更改时不会被销毁。

正如您所注意到的,当您旋转应用程序(或应用其他配置更改)时,Activity类会被销毁并重新创建,如果您想要持久保存Activity状态,您可以使用sqlite并在{{保存所需的任何内容1}}方法。然后在onPause()方法中检查DB的最后已知状态。

如果你想避免保存状态"永远" (意思是,用户关闭应用程序,明天当她重新开启时 - 你想重新开始并且加载上一个已知状态)你可以添加一个时间戳并设置一个阈值,如果通过后,数据被认为是陈旧的并被忽视。

两条评论:

  1. 正如@saprvade所写,默认情况下片段会被销毁,为了防止它你应该调用:onCreate()
  2. 如果您想实施@ saprvade的其他建议(让活动忽略轮换更改),您可以看到以下有关如何实施的说明:https://stackoverflow.com/a/456918/1057429