Android序列化parcelable和 serializable分析
来源:互联网 发布:中国最大论坛 知乎 编辑:程序博客网 时间:2024/04/29 09:51
Android中难免使用Intent在各个组件间进行传递数据,这个时候如果需要传递对象,就需要对对象进行序列化,序列化的方式有两种一种是parcelable,位于android.os包下,而serializable则位于java.io包下,下面分别对这两种方式进行一下分析。
一、通过parcelable方法实现序列化
notification.java 代码如下
从代码中可以看出想完成序列化的工作有几点需要注意的。
1、必须实现parcelable接口,然后复写两个方法,一个是describeContents方法一个是writeToParcel方法,但是第一个describeContents方法我们基本上不用去理会他,关心的内容放在writeToParcel上。
2、特别需要注意的是除了复写两个方法后还需要新建一个静态的Parcelable.Creator类,这里需要注意的是类名必须是CREATOR,否则将会收到错误警告如图所示
3、最核心的操作就是对数据进行序列化只要通过两个方法来实现
通过这两个方法完成对数据的序列化操作,但是这里需要注意的是如果使用基本数据类型可以使用writeInt,writeLong,writeDobule等等方法,如果其中嵌套对象呢,看下面的Message.java代码
代码中可以看出第一个message中嵌套一个实现了parcelable接口的类,上面我们提到了如果都是基本数据类型进行序列化,但是现在不是基本数据类型了我们如何序列化呢,想必在上面的message.java代码中已经看到了需要使用source.readParcelable(Notification.class.getClassLoader());通过readParcelable方法,这里需要注意的是参数需要一个classLoader,千万不要传入null,否则序列化的时候会抛出异常。
既然有readParcelable那我们就需要对应的writeParcelable,通过这两个方法基本完成了对于实现parcelable对象嵌套的序列化。
3、对于嵌套map的序列化操作,上面我们提到了基本数据类型和对象的嵌套序列化,但是如果我现在用在类中嵌套一个map呢这个时候该如何序列化。答案还是在message.java中,我们通过下面方法实现
嵌套类的时候不需要初始化,map需要初始化,这一点我比较疑惑,如果是我姿势不对还请大家指点一二。
二、通过serializable方法实现序列化
这种方法比较容易实现,如下图所示
只需要通过实现serializable接口就可以了,如果里面还要嵌套类,只要将所有的类实现serializable接口就好了。
总结:通过上面的分析我们可以看出serializable使用简单,而parcelable稍微复杂一点,但是serializable的兼容性更好点,原因就是parcelable是android.os包下的,由于android系统版本差异,可能会有一些不同,但是在内容开销方面要比serializable少很多,所以效率和性能上会高于serializable,所以两种方式各有利弊选择使用哪个看自己的实际需求。
能想到的暂时就是这么多,希望有说的不对的地方大家指出来,大家一同进步,非常感谢。最后附上源码,方便大家查看。
http://download.csdn.net/detail/mahaiming1990/9566324
1 0
- Android序列化parcelable和 serializable分析
- android序列化 Parcelable和Serializable接口
- Android序列化:Serializable和Parcelable详解
- Android 序列化 Parcelable和Serializable 浅谈
- Android序列化Serializable和Parcelable区别
- Android序列化:Serializable和Parcelable
- Android中的Serializable和Parcelable序列化
- Android序列化-Serializable和Parcelable
- Android中的序列化Serializable和Parcelable
- Android序列化问题-Parcelable和Serializable
- Android对象序列化:Serializable和Parcelable
- Android序列化:Serializable和Parcelable
- Android 序列化之Serializable和Parcelable
- Android-序列化,Parcelable,Serializable
- Android Serializable Parcelable 序列化
- Android 序列化Serializable、Parcelable
- Android序列化:Serializable & Parcelable
- Android序列化Parcelable、Serializable
- javaWeb基础
- redis 有序集合
- 【图像处理】加权最小二乘滤波器
- LDAP概念和原理
- IIPP迷你项目(四)"Pong"
- Android序列化parcelable和 serializable分析
- 重新认识HashMap(in JDK1.8)
- Spark-Streaming获取kafka数据的两种方式-Receiver与Direct的方式
- Serializable探究一二
- 这几天折腾spark的kafka的低阶API createDirectStream的一些总结。
- poj3264 Balanced Lineup
- 使用JavaScript写的剪刀石头布的游戏!
- Spring Mvc那点事---(24)Spring Mvc监听器监听对象和属性
- DirectStream、Stream的区别-SparkStreaming源码分析02