我目前在android应用程序中遇到持久对象状态的问题
我有一些多层次的主要细节流程
例如,我有一个Client
的列表。每个Client
都有多个Order
,每个Order
都有多个Article
。
到现在为止我做了以下几点:
- 当您点击Client
中的MasterActivity
时,我将Client
写入Bundle
并打开DetailActivity
。
- 在DetailActivity
我从Client
阅读了Bundle
并显示了它。
这种情况大多数时候或多或少都很好,但现在却发生了,一个对象太大而无法序列化(例如Client
有很多Order
s。
因此,我想仅序列化Client
的ID,并从DetailActivity
内的数据库加载它。通常这种方法很好但我有一种情况它不起作用:
Article
只有在您保存Order
(Master
)时才会保存。因此,如果您为Article
创建新Order
并且不保存Order
,则Article
也不会被保存。
这意味着,我总是需要拥有完整的对象,从DetailActivity
内的数据库重新加载它意味着我放弃了所有未保存的更改。但是,持久化,使用Bundle
s可能会超出限制(500kB to 1MB)。
所以我的问题是,保留这些数据的优先方法是什么?
答案 0 :(得分:2)
更好的方法是创建自己的单例类,指向要在活动之间传输的数据。
我建议使用Article articleToPass的DataManager单例活动 让setter设置articleToPass指向你想要的东西。 和getter或reader,将读取文章并取消articleToPass。
使用此DataManager单例管理您的应用程序数据(此dataManager单例可以在扩展的Application类或MainActivity中初始化。)
如果应用程序被销毁并加载回来,您必须坚持该对象:
我认为上述决议已经足够了:)希望我帮助
答案 1 :(得分:1)
您可以从MyApp
继承自己的Application
类,并在清单中指定它。这个类是一个单例,并且在运行android应用程序时始终可用,如(MyApp)getApplication()
。
因此,在这个类的字段中,您可以保留一些您需要在活动之间保留的临时数据。
您必须检查此字段是否不是null
,因为操作系统可以随时终止您的应用。在这种情况下,您将不得不重新加载数据。您可以在SharedPreferences
。