我目前面临在 Android 应用程序中持久化对象状态的问题。
我有某种多层次的主从流程。
例如,我有一个 Client
列表。每个 Client
都有多个 Order
,每个 Order
都有多个文章。
到目前为止,我做了以下事情:
- 当您在
MasterActivity
中单击一个Client
时,我将Client
写入Bundle
并打开DetailActivity
. - 在
DetailActivity
中,我从Bundle
中读取了Client
并显示了它。
这在大多数时候都或多或少地工作得很好,但是现在发生了,一个对象太大而无法序列化(例如一个 Client
有很多 Order
s).
因此我只想序列化 Client
的 ID,并从 DetailActivity
中的数据库加载它。通常这种方法效果很好,但我有一种情况不起作用:
只有当您保存Order
(它们的Master
)时,才会保存Article
。因此,如果您为 Order
创建一个新的 Article
并且不保存 Order
,则 Article
是'也保存了。
这意味着,我总是需要拥有完整的对象,重新加载它
从 DetailActivity
中的数据库意味着,我丢失了所有未保存的更改。但是,坚持使用 Bundle
可能会超出限制 ( 500kB to 1MB )。
所以我的问题是,保存此类数据的首选方式是什么?
最佳答案
更好的方法是创建您自己的单例类,它指向您要在 Activity 之间传输的数据。
我建议具有 Article articleToPass 的 DataManager 单例 Activity 让二传手将 articleToPass 设置为指向您想要的内容。 和 getter 或 reader,将读取获取文章并使 articleToPass 无效。
使用此 DataManager 单例管理您的应用程序数据(此 dataManager 单例可以在扩展的 Application 类或 MainActivity 中初始化)。
如果您必须在应用程序销毁和加载时保留对象:
- 从 Article 对象创建一个数据库条目,其中包含您需要的所有数据(我看不出为什么要在此处保存您不需要的数据)
- 将所有数据转储到某个文件(使用共享首选项、键和值)
- 当进入详细信息屏幕时,您需要向您的服务器查询,通过 ID 等请求您需要的所有数据。
- 将您需要的所有对象转换为 JSON(只需使用 GSON),并将 JSON 转储到文件中,并在需要时加载它。
我认为上面的解决方案就足够了:)希望我能帮上忙
关于android - 更改 Activity 时保留对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43063350/