Intent传递对象——Serializable和Parcelable差别

前两篇文章讨论了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的对象实在内存中完毕的序列化和反序列化,利用的是连续的内存空间,因此更加高效。

喜欢的朋友点个赞,关注一下!谢谢微笑

原文地址:https://www.cnblogs.com/mthoutai/p/6979324.html