在Activity跳转的时候,往往需要传递一个对象。不像String等基本类型,可以直接通过Intent的putExtra方法将数据加到Bundle中,换句话说对象并不是计算机可以识别的类型。
这样的话就涉及到了一个概念,序列化。
什么是序列化呢?序列化就是将对象转成可以存储或者传递的形式的过程,反序列化也是一个相反的过程,也就是将序列化后的数据转换成对象的一个过程。
Java与安卓分别提供了一种序列化的方法(Serializable和Parcelable)
那么二有什么区别呢?
1,Serializable会涉及到反射,产生大量的临时变量,这会引起系统频繁的GC
2,Serializable由JDK完成转换,而Parcelable则是自己完成序列化和反序列化,这就导致前者的效率要远低于后者。安卓之所以设计Parcelable的初衷就是Serializable效率过慢,为了在组件之间或者不同APP之间提高数据的传输速度,才设计了Parcelable。
3,如果当数据要存储在磁盘而不是内存中,Parcelable无法保证在外部环境发生变化时的连续性。
因此,在Android的组件或者APP之间传递数据,选择Parcelable。如果想要保存数据或者在网络上传输则选择Serializable。
二者在使用上也有很大的区别:
首先,对于Serializable来说使用非常简单,只需要让对象实现Serializable接口即可
我们可以看到Serializable这个接