【问题标题】:Android Intent passing parcelable object vs passing Json stringAndroid Intent 传递可打包对象与传递 Json 字符串
【发布时间】:2023-03-03 15:11:02
【问题描述】:

我知道我的问题有一些答案,但答案不是很详尽或令人信服。 在我的程序中,为了将数据从一个活动传输到另一个活动,我将 POJO 类的内容转换为 Json 字符串并通过捆绑 (Method1) 传递。

方法1

String jsonString = JacksonSingleton.getObjectMapper().writeValueAsString(object);
bundle.putExtra(KEY_STR, jsonString)

在方法 2 中,我在包中传递了一个 Parcelable 对象。

方法2

bundle.putExtra(KEY_STR, parcelableObject);

如果我要实现方法 2,我必须实现 Parcelable 接口并编写自定义代码来编组和解组我的 POJO 类字段。

我的问题,就性能而言,这些方法中哪一种更好/推荐?方法 1 很方便,但我想遵循最佳实践。

【问题讨论】:

标签: android json serialization jackson parcelable


【解决方案1】:

编辑: 如果你讨厌像我一样编写“Parcelable”样板代码,你可以在你的 Android Studio/IntelliJ IDE 中使用Parcelable code generator 插件。它将自动生成用于编组和解组您的类字段的方法。非常易于使用,强烈推荐。


尽管我讨厌回答自己的问题,但我想分享我的观察结果,以便将来帮助其他开发人员。

数据从一个活动到另一个活动的传输可以通过在活动意图中传递可序列化或可打包对象来完成。 Android 开发者网站推荐使用Parcelable interface for this purpose

但是,我的问题是关于传递 Parcelable 对象和 JSON 字符串之间的效率比较

为了测试这一点,我使用了一台旧的低端 Android 设备。我通过在活动意图中发送一个大型 Parcelable 对象来启动一个活动。接下来,我使用活动意图中相同对象的 JSON 字符串启动了相同的活动。我观察到的是在通过发送 JSON 字符串而不是 Parcelable 对象来启动活动时存在明显的可观察延迟。

总之,即使我们传递一个 JSON 字符串,Java String object always implements Serializable。 Google 建议使用 Parcelable 而不是 Serializable 对象。在长度可以忽略不计的字符串的情况下,这通常是微不足道的。但是,在海量对象的海量Json字符串的情况下,效率肯定会有所损失。

您可以参考performance benchmark of Parcelable vs Serializable


TLDR:

  • Parcelable - 更多样板代码、更好的性能和更好的整体工程实践。

  • Serializable - 代码更少,易于学习,如果您不沉迷于性能/最佳实践,也可以接受。

【讨论】:

  • 您是否尝试过在 Parcelable 中传递 JSON 字符串?通过这种方式,您可能会两全其美。
【解决方案2】:

JSON 对象/数组是全球通用的,可以通过互联网传输,我们可以在不同的平台上用不同的编程语言以相同的方式处理它,并且易于存储。如果机器不是那么慢,数据不是那么大,我更喜欢使用 JSON。

如何将额外的大数据发送到另一个活动?有时我只是发送存储数据的 ID 或使用单例处理对象...(其他应用程序可以访问 Parcelable 对象吗?)

所以 Parcelable 是用于在同一个应用程序中使用的跨进程..就像 RemoteView 和 Service 使用它来方便地传输数据......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 2020-09-25
    相关资源
    最近更新 更多