【问题标题】:Android - Pass complex objects between activities with Parcelable or Json?Android - 使用 Parcelable 或 Json 在活动之间传递复杂对象?
【发布时间】:2017-04-12 13:03:46
【问题描述】:

我想知道在这两种方法之间的活动之间移动对象的最佳性能和更简单的方法是什么。我知道 Parcelable 是专为 Android 设计的,但是如何使用 Gson 解析复杂对象或它的数组并将其设置为额外的意图作为字符串,在第二个活动中检索它并将其作为对象解析回来。在我的示例中,我有一个内容列表,每个内容都有一个主题列表。旅行 json 是比使用 parcelable 旅行物体更好还是更差的方式? 我排除了诸如保存在磁盘上或使用可序列化之类的选项。

【问题讨论】:

  • 恕我直言,要么这些应该组合成一个活动,要么你应该实现一些两个活动都可以访问的进程范围的缓存。
  • 两者都不是。 Parcelables 和 JSON 都涉及大量开销——与简单地分配给变量相比,绝对单位不是很多,而是 很多。仅当您确实想要序列化某些内容或出于其他原因必须使用它们时(例如当您必须遵守 Intent/Bundle/AIDL 合同或从 REST API 接收数据时)才使用它们。与 Parcelable JSON 不同的是,JSON 存储参数的名称,因此它更易于阅读,但因此占用的内存更大。
  • 至于相对性能(如“CPU时间,浪费在(反)序列化上”),两者之间应该没有区别。许多当之无愧的流行 JSON 处理库 (khm-G-kham-SON) 使用反射,所以它们的速度很糟糕。但是一个写得很好的 JSON 反序列化器,比如 LoganSquare,在序列化速度方面与 Parcelable 是一样的。
  • 非常有帮助的答案 user1643723,这正是我想要的答案类型,它启发了我。并且不知道LoganSquare,我会试一试。再次感谢您!

标签: android json android-activity parcelable gson


【解决方案1】:

选项 1。 将数据存储在集中式对象(单例等)中,然后在 Activity 中访问该对象。

假设您有一个单例类 AppData。将数据存储在 AppData 中。直接在您的活动中使用 AppData 访问数据。

选项2。在相应的类中实现Parcelable,然后通过intent 将parcelable 对象传递给activity,或者优先存储parcelable 数据。 How to make entity parcelable with just copy paste

选项 3. 在相应的类中实现 Serializable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多