我知道我的问题有一些答案,但答案并不十分精细或令人信服。 在我的程序中,为了将数据从一个活动传输到另一个活动我将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非常方便,但我想遵循最佳实践。
答案 0 :(得分:19)
修改强> 如果您不喜欢像我一样编写'Parcelable'样板代码,您可以在Android Studio / IntelliJ IDE中使用Parcelable code generator插件。非常易于使用和设置。
尽管我讨厌回答自己的问题,但我想我会讨论并分享我将来会对其他人有所帮助的观察。
可以使用在活动意图中传递Serializable或Parcelable Objects来完成从一个活动到另一个活动的数据传输。 Android开发人员网站建议为此目的使用Parcelable接口(link)。
但是,我的问题与传递Parcelable对象和JSON字符串之间的效率比较有关。
为了测试这个,我使用了旧的和低端的Android设备。我通过在活动意图中发送一个大的Parcelable对象来启动一个活动。接下来,我使用活动意图中相同对象的JSON字符串启动了相同的活动。我观察到的是通过发送JSON字符串而不是Parcelable Object来启动活动时显着的可观察延迟。
总之,即使我们传递JSON字符串,String对象也会实现Serializable。 Google建议使用Parcelable而不是Serializable对象。如果长度可以忽略不计,这通常是微不足道的。然而,对于大型物体的大量Json Strings,效率肯定会造成损失。
答案 1 :(得分:0)
JSON对象/数组是全局用法,可以通过Internet传输,我们可以通过不同平台上的不同编程语言以相同方式处理它,并且易于存储。如果机器不是很慢并且数据不是很大,我更喜欢使用JSON。
将多余的大量数据发送给另一个活动该怎么办?有时我只是发送一个存储数据的ID或使用单例来处理对象...(另一个应用程序可以访问Parcelable对象吗?)
因此,Parcelable适用于同一应用程序中的跨进程。就像RemoteView和Service一样,使用它来传输数据也很方便...