- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我知道我的问题有一些答案,但答案不是很详尽或令人信服。在我的程序中,为了将数据从一个 Activity 传输到另一个 Activity ,我将 POJO 类的内容转换为 Json 字符串并通过包(方法 1)传递。
方法一
String jsonString = JacksonSingleton.getObjectMapper().writeValueAsString(object);
bundle.putExtra(KEY_STR, jsonString)
在方法 2 中,我在包中传递一个 Parcelable
对象。
方法2
bundle.putExtra(KEY_STR, parcelableObject);
如果我要实现方法 2,我将必须实现 Parcelable
接口(interface)并编写自定义代码来编码和解码我的 POJO 类字段。
我的问题是,就性能而言,这些方法中哪种更好/推荐?方法 1 非常方便,但我想遵循最佳实践。
最佳答案
编辑:如果你讨厌像我一样编写“Parcelable”样板代码,你可以使用 Parcelable code generator使用 Android Studio/IntelliJ IDE 插件。它将自动生成编码和解码类字段的方法。非常易于使用,强烈推荐。
尽管我很讨厌回答自己的问题,但我想分享我的观察结果,以在未来帮助其他开发者。
将数据从一个 Activity 传输到另一个 Activity 可以使用在 Activity Intent 中传递可序列化或可打包对象来完成。安卓开发者网站推荐使用Parcelable interface for this purpose .
但是,我的问题是关于传递 Parcelable 对象和 JSON 字符串之间的效率比较。
为了对此进行测试,我使用了一台旧的低端 Android 设备。我通过在 Activity Intent 中发送一个大的 Parcelable 对象来启动一个 Activity 。接下来,我在 Activity Intent 中使用同一对象的 JSON 字符串启动了同一 Activity 。我观察到的是在通过发送 JSON 字符串而不是 Parcelable 对象启动 Activity 时出现明显的可观察延迟。
总而言之,即使我们传递一个 JSON 字符串,Java String object always implements Serializable . Google 建议使用 Parcelable 而不是 Serializable 对象。如果字符串的长度可以忽略不计,这通常是微不足道的。但是,对于海量对象的海量Json String,效率肯定会有所下降。
您可以引用此 performance benchmark of Parcelable vs Serializable .
TLDR:
Parcelable
- 更多样板代码、更好的性能和更好的整体工程实践。
Serializable
- 代码更少,易于学习,如果您不执着于性能/最佳实践,则可以接受。
关于Android Intent 传递 parcelable 对象与传递 Json 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36807247/
我有两个 Activity,A 和 B。我试图将对象从 Activity A 发送到 Activity B。在 Activity A 中,我可以看到我的列表包含两个项目,但是当我在 Activity
我想在android中使用Parcelable而不是Serializable,因为它更快,推荐。我的问题是,我好像无法打包Java提供的类LinkedHashMap,对吧? 例如 public cla
我在为我的 Android 应用程序使用 parcelables 时遇到了一些问题。 我有一个名为 Transport 的自定义类,其中包含一堆 RoutePoint - 从文件加载并保存在数组中的实
编辑 清理和重建后,没有生成类 我在尝试使用 Parcels.wrap() 时遇到此错误 Unable to find generated Parcelable class for xyz.xyz.m
我有一个扩展 Parcelable 的类,我们称它为 A 类。 我有另一个扩展 Parcelable 的类,我们称之为 B 类。 A 的成员变量之一是 B 类对象的 ArrayList。 我正在尝试编
当我尝试使用 @Parcelize 注释 enum class 或 object 时,会导致错误 'Parcelable' should是一个类,既作为编辑器提示又作为编译失败。我可以 @Parcel
确实是相当简单的场景,但我在 Google 上找不到任何相关内容,所以这里是: class ContainerClass implements Parcelable { List _items;
我有一个实现Parcelable接口(interface)的类: class A implements Parcelable { } 我有另一个类 B 包含一个 A 对象作为实例变量。在类 B 内的
我如何实现写我的Set >使用通用数据类型到我的包裹? 这是我的代码.. dest.writeList(getArrTRA()); dest.writeList(ge
我有一个 Java Bean 类,在某些字段上用 @Parcel(Parcel.Serialization.BEAN) 和 Gson 的 @SerializedName 注释: 问题.java: @P
有时,我收到此错误,我不知道我的代码出了什么问题帮忙! 任何有帮助的建议代码。 这是我的错误报告: com.example E/UncaughtException: java.lang.Runtime
我正在实现具有另一个 Parcelable insde 的 Parcelable 类。 在 OuterParcelable 类中: @Override public void writeToParce
我想编码和解码一个实现 Parcelable 到/来自字节数组的类。 我很清楚 Parcelable 表示不稳定,因此不适合长期存储实例。但是我有一个用例,我需要序列化一个对象,它不是一个展示停止器如
有没有办法使用Parceler使用 Kotlin 数据类和构造函数进行序列化,而不为每个字段使用 @ParcelProperty 注释? 如果我尝试使用这样的库: @Parcel data class
我正在尝试编写一个可打包的数据对象,以便在我的 android 应用程序中从 activityA 传递到 activityB。 我的对象正在传递所有数据,除了我的可用服务类的 arraylist da
我在上课时遇到问题 Parcelable .问题是,我正在尝试将类(class)中的成员写入包裹,该成员是 ArrayList。目的。 ArrayList是 Serializable ,并且列表中的对
我有一个可打包的团队类 @Parcelize class Team(var name: String, var teamMembers: List, var id: UUID): Parcelable
我有一个包含另一个对象的对象,我想使用 Parcelable 将一个 fragment 发送到另一个 fragment ,例如: Fragment fragment = new Fragment();
Parceler 的自述文件指出它可以与其他基于 POJO 的库一起使用,尤其是 SimpleXML。 是否有任何示例可以证明其用法? 我已经成功地将 Parceler 与 GSON 结合使用: Gs
我是 android 的新手,在思考 Parcelable 界面时遇到了一些麻烦。 我终于找到了这个: https://stackoverflow.com/a/2141166/6647053 上述回答
我是一名优秀的程序员,十分优秀!