前两篇文章讨论了Serializable和Parcelable实现Intent之间传递对象和对象数组的方式。两种方法实现上相似,效果一致,怎么选择用哪种方法实现呢?
Intent在不同的组件中传递对象数据的应用很普遍。以下介绍两种通过Intent传递对象的方法。
1、实现Serializable接口
2、实现Parcelable接口
为什么要将对象序列化?
1、永久性保存对象,保存对象的字节序列到本地文件里。
2、用过序列化对象在网络中传递对象;
3、通过序列化对象在进程间传递对象。
1、实现Serializable接口
Serializable的作用是将数据对象存入字节流其中,在须要时又一次生成对象。主要应用是利用外部存储设备保存对象状态。以及通过网络传输对象等。
implements Serializable接口的的作用就是给对象打了一个标记,系统会自己主动将其序列化。
2、实现Parcelable接口
1)为什么要实现Parfcelable接口来实如今Intent中传递对象?
a、在使用内存的时候,Parcelable比Serializable性能高。所以推荐使用Parcelable类。
b、Serializable在序列化的时候会产生大量的暂时变量,从而引起频繁的GC。
注意:Parcelable不能使用在将数据存储在磁盘上的情况,由于Parcelable不能非常好的保存数据的持续性在外界有变化的情况下。
因此在这样的情况下,建议使用Serializable
2) Android中的新的序列化机制在Android系统中。针对内存受限的移动设备。因此对性能要求更高,Android系统採用了新的IPC(进程间通信)机制,要求使用性能更出色的对象传输方式。因此Parcel类被设计出来,其定位就是轻量级的高效的对象序列化和反序列化机制。
Parcel的序列化和反序列化的读写全是在内存中进行,所以效率比JAVA序列化中使用外部存储器会高非常多。
Parcel类
就应用程序而言,在常使用Parcel类的场景就是在Activity间传递数据。在Activity间使用Intent传递数据的时候,能够通过Parcelable机制传递复杂的对象。
Parcel机制:本质上把它当成一个Serialize就能够了。仅仅是Parcel的对象实在内存中完毕的序列化和反序列化,利用的是连续的内存空间,因此更加高效。
喜欢的朋友点个赞,关注一下!谢谢