为什么Android为序列化对象提供了两个接口?序列化对象与Android Binder和AIDL文件interopt ?


当前回答

可序列化的

Serializable是一个可标记的接口,也可以作为空接口调用。它没有任何预先实现的方法。Serializable将对象转换为字节流。因此用户可以在一个活动之间传递数据到另一个活动。可序列化的主要优点是创建和传递数据非常容易,但与可打包相比,它是一个缓慢的过程。

Parcelable

可打包的比可序列化的快。Parcel able将对象转换为字节流,并在两个活动之间传递数据。与序列化相比,编写可包的代码有点复杂。在两个活动之间传递数据时,它不会创建更多的临时对象。

其他回答

你可以在intent中使用serializable对象,但是在使serialize成为Parcelable对象的时候,它会给出一个严重的异常,比如NotSerializableException。不建议使用serializable和Parcelable。所以最好是扩展Parcelable与你想要使用的对象捆绑和意图。由于这个Parcelable是android特定的,所以它没有任何副作用。 :)

1. 可序列化的

接口是一个标记(没有抽象方法的接口),不需要重新定义任何东西。

2. Parcelable

具有抽象方法的接口。在实现它的时候,你需要重新定义所有的抽象方法,指定哪些字段以及你需要写/读的顺序(通常工作室自己可以生成它们)。

实际上没有人用Kotlin编写。对此有一个特殊的注释,由于它,这个接口的实现将自动生成。要使用它,你需要添加一个特殊的插件。

在构建。Gradle插件部分,添加另一个插件:id 'kotlin-parcelize'

同步项目

您不必担心实现方法,您所需要的只是实现Parcelable接口并添加@Parcelize注释。

一切都会好的,工作很快!

结果

如果实现Parcelable接口而不是Serializable接口,实现过程会更快。

我将成为一个支持Serializable的人。由于这些设备比几年前好得多,速度上的差异已经不那么明显了,而且还有其他更微妙的差异。更多信息请参见我的博客文章。

如果你在android studio中使用paracelable插件,parcelable的实现可以更快。搜索Android Parcelable代码生成器

打包比使用Binder序列化快得多,因为序列化使用反射并导致许多GC。Parcelable是为了优化传递对象而设计的。

这是参考链接。 http://www.developerphil.com/parcelable-vs-serializable/