Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android意图传递包裹对象与传递Json字符串_Android_Json_Serialization_Jackson_Parcelable - Fatal编程技术网

Android意图传递包裹对象与传递Json字符串

Android意图传递包裹对象与传递Json字符串,android,json,serialization,jackson,parcelable,Android,Json,Serialization,Jackson,Parcelable,我知道我的问题有一些答案,但答案不是很详细,也没有说服力。 在我的程序中,为了将数据从一个活动传输到另一个活动,我将POJO类的内容转换为Json字符串,并通过bundle(Method1)进行传递 方法1 String jsonString = JacksonSingleton.getObjectMapper().writeValueAsString(object); bundle.putExtra(KEY_STR, jsonString) 在方法2中,我将传递捆绑包中的Parcelable

我知道我的问题有一些答案,但答案不是很详细,也没有说服力。 在我的程序中,为了将数据从一个活动传输到另一个活动,我将POJO类的内容转换为Json字符串,并通过bundle(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非常方便,但我希望遵循最佳实践。

编辑: 如果你不喜欢写像我这样的“Parcelable”样板代码,你可以在你的Android Studio/IntelliJ IDE中使用这个插件。它将自动生成用于编组和取消编组类字段的方法。非常容易使用,强烈推荐


尽管我不喜欢回答自己的问题,但我还是想分享我的观察结果,以帮助将来的其他开发人员

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

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

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

总之,即使我们传递一个JSON字符串。谷歌建议使用Parcelable而不是Serializable对象。对于长度可以忽略不计的字符串,这通常是无关紧要的。然而,对于大量对象的大量Json字符串,效率肯定会受到影响

你可以参考这本书


TLDR:

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

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


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

将大量数据发送到另一个活动的额外内容是什么?有时我只是发送一个存储数据的ID或使用单例来处理对象。。。(其他应用程序是否可以访问可包裹对象?)


因此,该包裹适用于同一应用程序中使用的交叉处理。。就像RemoteView和Service使用它来传输数据一样,为了方便…

各位,请不要在没有评论或回答的情况下否决这个问题…看看这里,这里。明智地选择。我不想在可序列化和可打包之间进行比较。我只是想检查传递一个普通字符串和一个可包裹对象之间的性能差异。如果仅仅使用基于字符串的序列化更快,我想安卓的家伙甚至都没有费心引入
parcelable
Stuff。你试过在一个可包裹中传递一个JSON字符串吗?通过这种方式,你可能会两全其美。