zoukankan      html  css  js  c++  java
  • 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的对象实在内存中完毕的序列化和反序列化,利用的是连续的内存空间,因此更加高效。

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

  • 相关阅读:
    SQL JOIN
    string.Empty, "" 和 null 三者的区别
    java JDBC
    java 自定义注解
    Spring Bean自动检测
    Spring Aware接口
    IObservable 接口
    CloseHandle()函数的使用
    [置顶] 记一次讲座与前辈的对话
    让用户关上门说话:覆盖全美6000个社区的邻居私密社交网站Nextdoor是如何壮大的?
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6979324.html
Copyright © 2011-2022 走看看