更改活动

时间:2017-03-28 07:36:33

标签: android android-intent android-activity serialization

我目前在android应用程序中遇到持久对象状态的问题 我有一些多层次的主要细节流程 例如,我有一个Client的列表。每个Client都有多个Order,每个Order都有多个Article。 到现在为止我做了以下几点:
- 当您点击Client中的MasterActivity时,我将Client写入Bundle并打开DetailActivity
- 在DetailActivity我从Client阅读了Bundle并显示了它。

这种情况大多数时候或多或少都很好,但现在却发生了,一个对象太大而无法序列化(例如Client有很多Order s。

因此,我想仅序列化Client的ID,并从DetailActivity内的数据库加载它。通常这种方法很好但我有一种情况它不起作用:

Article只有在您保存OrderMaster)时才会保存。因此,如果您为Article创建新Order并且不保存Order,则Article也不会被保存。
这意味着,我总是需要拥有完整的对象,从DetailActivity内的数据库重新加载它意味着我放弃了所有未保存的更改。但是,持久化,使用Bundle s可能会超出限制(500kB to 1MB)。

所以我的问题是,保留这些数据的优先方法是什么?

2 个答案:

答案 0 :(得分:2)

更好的方法是创建自己的单例类,指向要在活动之间传输的数据。

我建议使用Article articleToPass的DataManager单例活动 让setter设置articleToPass指向你想要的东西。 和getter或reader,将读取文章并取消articleToPass。

使用此DataManager单例管理您的应用程序数据(此dataManager单例可以在扩展的Application类或MainActivity中初始化。)

如果应用程序被销毁并加载回来,您必须坚持该对象:

  1. 从Article对象创建一个DB条目,其中包含您需要的所有数据(我认为没有理由保存您不需要的数据)
  2. 将所有数据转储到某个文件(使用共享首选项,键和值)
  3. 当您进入详细信息屏幕时,您想要查询您的服务器,请求ID所需的所有数据。
  4. 将您需要的所有对象转换为JSON(仅使用GSON),并将JSON转储到文件中,并在需要时加载它。
  5. 我认为上述决议已经足够了:)希望我帮助

答案 1 :(得分:1)

您可以从MyApp继承自己的Application类,并在清单中指定它。这个类是一个单例,并且在运行android应用程序时始终可用,如(MyApp)getApplication()

因此,在这个类的字段中,您可以保留一些您需要在活动之间保留的临时数据。

您必须检查此字段是否不是null,因为操作系统可以随时终止您的应用。在这种情况下,您将不得不重新加载数据。您可以在SharedPreferences

中的某处保留一些要重新加载的数据的索引