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也可以

Parcelable与Serializable相关推荐

  1. Android系统中Parcelable和Serializable的区别

    进行Android开发的时候,我们都知道不能将对象的引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递. 通过Android的A ...

  2. Parcelable与Serializable接口的用法和区别

    转自:https://www.cnblogs.com/jiefeiduan/p/3959411.html 1. Parcelable接口 Interface for classes whose ins ...

  3. Android中Parcelable与Serializable接口用法

    转自: Android中Parcelable接口用法 1. Parcelable接口 Interface for classes whose instances can be written to a ...

  4. android 序列化传参数,Android序列化之Parcelable和Serializable的使用详解

    序列化与反序列 首先来了解一下序列化与反序列化. 序列化 由于存在于内存中的对象都是暂时的,无法长期驻存,为了把对象的状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化. 反序 ...

  5. android数据回传的代码,android Activity之间数据传递 Parcelable和Serializable接口的使用...

    Activity之间传数据时,为了避免麻烦,往往会将一些值封装成对象,然后将整个对象传递过去.传对象的时候有两种情况,一种是实现Parcelable接口,一种是实现Serializable接口. 0. ...

  6. Android 开发 Parcelable,Serializable接口

    Activity之间传数据时,为了避免麻烦,往往会将一些值封装成对象,然后将整个对象传递过去. 对于Android来说传递复杂类型,主要是将自己的类转换为基础的字节数组,Activity之间传递数据是 ...

  7. 序列化知识 Parcelable和Serializable

    1.Parcelable和Serializable有什么用,它们有什么差别? (1)Serializable的作用是为了保存对象的属性到本地文件.数据库.网络流.rmi以方便数据传输,当然这种传输可以 ...

  8. Parcelable与Serializable的比较

    Parcel: Android中的序列化方式,可用于跨进程传输 Parcelable 进程间 如:想从一个第三方app拿进程回来 Serializable 进程内

  9. Android Parcelable和Serializable的区别

    1.作用 Serializable的作用是为了保存对象的属性到本地文件.数据库.网络流.rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的.而Android的Parcelable的设 ...

最新文章

  1. event对象(触发机制)
  2. 2020牛客多校第3场:[Points Construction Problem + 思维题+构造]
  3. python for-Python for 循环
  4. Mysql入门实战中
  5. 严蔚敏版《数据结构 (C语言版)》和《数据结构题集》(一)
  6. 假如我是面试官,我会这样虐你
  7. zookeeper运维管理
  8. 微型计算机电源的选购应注意哪些问题,购买小功率ups电源的注意事项
  9. C++ 复制字符串/字符数组
  10. 2018-06-29 西游记主题Python入门示例尝试-数据结构 5.1-5.1.2
  11. 输入手机号码 和 金额有效性的判断
  12. 微原创——好用的文章转换工具自媒体利器
  13. 前端基础学习-element-ui表格表头做成斜线表头
  14. 使用百度大脑构建一个闲聊机器人
  15. linux通过文件修改密码,如何通过Linux系统来修改密码
  16. EVB_MX+ TencentOS tiny物联网开发板首次使用记录路灯调试(1)
  17. 用计算机VLOOKUP,vlookup怎么用?
  18. 美企暂停俄罗斯业务,凸显国内企业阿里等自研操作系统前瞻性
  19. Android - Adapter 适配器
  20. java并查集判断是否是连通图_并查集-判断图的连通

热门文章

  1. iOS: UIWebView 中不加载图片(即浏览器常见的无图模式)
  2. oracle等值连接与innerjoin,inner join(等值联接)、left join(左联接)、right join(右联接)用法及区别...
  3. 苹果android什么意思,用惯了安卓机的人,换了iphone以后是什么感受?
  4. 怎样调整计算机桌面字体大小,电脑字体太小怎么调,详细教您怎样更改电脑界面的字体大小...
  5. 收到江西省委书记点赞!
  6. spring starter原理和实例
  7. 运用计算机优化教学的方法,浅谈计算机教学中多种教学方法优化运用.doc
  8. 发现几个极好的js脚本网站
  9. Jetson Nano 源码编译安装PySide6
  10. linux常用rootkit技术,unix下的 rootkit