Android序列化接口Parcelable与Serializable接口对比

 更新时间:2023年02月07日 09:31:50   作者:小尹编码中...  
我们使用 Intent 传递数据的时候,putExtra() 所支持的数据类型事有限的,当需要传递自定义对象的时候就需要序列化。Serializable更简单但是会把整个对象进行序列化因此效率比Parcelable低一些

Parcelable

优点:

  • google专门为安卓写的序列化接口
  • 性能好,内存开销小,效率高,写起来复杂

缺点:

  • 各个机型可能有差异,Parcelable使用会产生差异
  • 通讯组件之间(AIDL ,INTENT)的数据传递,可以使用Parcelable
  • 写入存储设备推荐使用Serializable
 public class MyParcelable implements Parcelable {
 *     private int mData;//参数
 *     public int describeContents() {//类描述,一般不管他
 *         return 0;
 *     }
 *     public void writeToParcel(Parcel out, int flags) {//序列化 :out写入参数,要注明参数类型 flag一般默认是0,1代表对象需要返回,不回收
 *         out.writeInt(mData);
 *     }
 *     public static final Parcelable.Creator<MyParcelable> CREATOR//反序列化操作
 *             = new Parcelable.Creator<MyParcelable>() {
 *         public MyParcelable createFromParcel(Parcel in) {
 *             return new MyParcelable(in);
 *         }
 *         public MyParcelable[] newArray(int size) {
 *             return new MyParcelable[size];
 *         }
 *     };
 *     private MyParcelable(Parcel in) {
 *         mData = in.readInt();
 *     }
 * }

google官方也是很贴心呀,直接把怎么用放在源码的注释里了

Serializable

优点:

  • java自带的序列化接口
  • Serializable是一个空接口,使用简单,是一个标识,会给类一个序列化UID

缺点:

  • 因为使用的是反射,使用性能差,内存开销大
package java.io;
// Android-added: Notes about serialVersionUID, using serialization judiciously, JSON.
public interface Serializable {
}

Serializable 是一个空接口,用来标识当前类可以被 ObjectOutputStream序列化,以及被ObjectInputStream反序列化

Parcelable与Serializable的性能比较

  • 在内存的使用中,Parcelable在性能方面要强于Serializable
  • Serializable在序列化操作的时候会产生大量的临时变量,(原因是使用了反射机制)从而导致GC的频繁调用,因此在性能上会稍微逊色
  • Parcelable是以Ibinder作为信息载体的,在内存上的开销比较小,因此在内存之间进行数据传递的时候,Android推荐使用Parcelable
  • 在读写数据的时候,Parcelable是在内存中直接进行读写,而Serializable是通过使用IO流的形式将数据读写入在硬盘上
  • 虽然Parcelable的性能要强于Serializable,但是仍然有特殊的情况需要使用Serializable,而不去使用Parcelable,因为Parcelable无法将数据进行持久化,因此在将数据保存在磁盘的时候,仍然需要使用后者,因为前者无法很好的将数据进行持久化 (原因是在不同的Android版本当中,Parcelable可能会不同,因此数据的持久化方面仍然是使用Serializable)

总结:

  • Java应用程序中有Serializable来实现序列化操作
  • Android中有Parcelable来实现序列化操作   
  • 在Android中除了对数据持久化的时候需要使用到Serializable来实现序列化操作,其他的时候我们仍然需要使用Parcelable来实现序列化操作
  • 在Android中效率并不是最重要的,而是内存, 通过比较Parcelable在效率和内存上强于Serializable

个人小建议:

尽管Parcelable实现起来比较复杂,但是如果我们想要成为一名优秀的Android软件工程师,那么我们就需要勤快一些去实现Parcelable,而不是偷懒与实现Serializable,当然实现Serializable也可以

到此这篇关于Android序列化接口Parcelable与Serializable接口对比的文章就介绍到这了,更多相关Android Parcelable与Serializable内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android Filterable实现Recyclerview筛选功能的示例代码

    Android Filterable实现Recyclerview筛选功能的示例代码

    这篇文章主要介绍了Android Filterable实现Recyclerview筛选功能的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • android判断动画已结束示例代码

    android判断动画已结束示例代码

    添加一个动画效果,发现动画没执行完 就直接跳转或者finish掉,添加动画监听事件即可,示例代码如下
    2014-10-10
  • android中webview定位问题示例详解

    android中webview定位问题示例详解

    这篇文章主要给大家介绍了关于android中webview定位问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • Android小部件Widget开发过程中的坑和问题小结

    Android小部件Widget开发过程中的坑和问题小结

    这篇文章主要介绍了Android小部件Widget开发过程中的坑和问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 零基础学习教程之Linux下搭建android开发环境

    零基础学习教程之Linux下搭建android开发环境

    这篇文章主要介绍了Linux下搭建android开发环境,特别适合零基础的同学学习,想要在Linux及ubuntu11.10下配置android4.0.3开发环境的朋友可以参考一下
    2015-12-12
  • 详解Android类加载ClassLoader

    详解Android类加载ClassLoader

    本篇文章主要介绍了详解Android类加载ClassLoader,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Android自定义滑动验证条的示例代码

    Android自定义滑动验证条的示例代码

    本篇文章主要介绍了Android自定义滑动验证条的示例代码,具有一定的参考价值,有兴趣的可以了解一下
    2017-08-08
  • Android 图片网格布局控件示例代码

    Android 图片网格布局控件示例代码

    本篇文章主要介绍了Android 图片网格布局控件示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Android实现IP地址输入框的方法示例代码

    Android实现IP地址输入框的方法示例代码

    输入框是我们日常开发中经常遇到的一个控件,如果更好的控制输入框是对用户体验很重要的一步,所以下面这篇文章主要给大家介绍了关于Android如何实现IP输入框的相关资料,需要的朋友可以参考下。
    2017-10-10
  • Android开发之React Navigation 导航栏样式调整+底部角标消息提示

    Android开发之React Navigation 导航栏样式调整+底部角标消息提示

    这篇文章主要介绍了React Navigation 导航栏样式调整+底部角标消息提示的相关知识,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05

最新评论