Android开发之Serializable 和 Parcelable的差别(源码分享)
2017-04-26 14:11
393 查看
android 中自己定义的对象序列化的问题有两个选择一个是Parcelable,另外一个是Serializable。
一 序列化原因:
1.永久性保存对象。保存对象的字节序列到本地文件里。
2.通过序列化对象在网络中传递对象。
3.通过序列化在进程间传递对象。
二 至于选取哪种可參考以下的原则:
1.在使用内存的时候,Parcelable 类比Serializable性能高,所以推荐使用Parcelable类。
2.Serializable在序列化的时候会产生大量的暂时变量。从而引起频繁的GC。
3.Parcelable不能使用在要将数据存储在磁盘上的情况。由于Parcelable不能非常好的保证数据的持续性在外界有变化的情况下。虽然Serializable效率低点, 也不提倡用,但在这样的情况下,还是建议各位能够用Serializable 。
Serializable 的实现,仅仅须要继承 implements Serializable 就可以。
这仅仅是给对象打了一个标记,系统会自己主动将其序列化。
Parcelable的实现须要下面步骤
(1)describeContents方法。内容接口描写叙述,默认返回0就能够;
(2)writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.即打包须要传递的数据到Parcel容器保存。以便从parcel容器获取数据。该方法声明例如以下:
writeToParcel (Parcel dest, int flags)
(3)创建对应函数的构造方法
(4)静态的Parcelable.Creator接口,本接口有两个方法:
createFromParcel(Parcel in) 从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层。
newArray(int size) return new T[size])
源码例如以下
一 序列化原因:
1.永久性保存对象。保存对象的字节序列到本地文件里。
2.通过序列化对象在网络中传递对象。
3.通过序列化在进程间传递对象。
二 至于选取哪种可參考以下的原则:
1.在使用内存的时候,Parcelable 类比Serializable性能高,所以推荐使用Parcelable类。
2.Serializable在序列化的时候会产生大量的暂时变量。从而引起频繁的GC。
3.Parcelable不能使用在要将数据存储在磁盘上的情况。由于Parcelable不能非常好的保证数据的持续性在外界有变化的情况下。虽然Serializable效率低点, 也不提倡用,但在这样的情况下,还是建议各位能够用Serializable 。
Serializable 的实现,仅仅须要继承 implements Serializable 就可以。
这仅仅是给对象打了一个标记,系统会自己主动将其序列化。
Parcelable的实现须要下面步骤
(1)describeContents方法。内容接口描写叙述,默认返回0就能够;
(2)writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.即打包须要传递的数据到Parcel容器保存。以便从parcel容器获取数据。该方法声明例如以下:
writeToParcel (Parcel dest, int flags)
(3)创建对应函数的构造方法
(4)静态的Parcelable.Creator接口,本接口有两个方法:
createFromParcel(Parcel in) 从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层。
newArray(int size) return new T[size])
源码例如以下
package com.example.service; import android.os.Parcel; import android.os.Parcelable; public class Person implements Parcelable{ private int age; private String name; public Person(Parcel in) { age=in.readInt(); name=in.readString(); } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int describeContents() { // TODO Auto-generated method stub return 0; } @Override public void writeToParcel(Parcel dest, int flags) { // TODO Auto-generated method stub dest.writeInt(age); dest.writeString(name); } public static final Parcelable.Creator<Person> CREATOR=new Creator<Person>() { @Override public Person[] newArray(int size) { // TODO Auto-generated method stub return new Person[size]; } @Override public Person createFromParcel(Parcel source) { // TODO Auto-generated method stub return new Person(source) ; } }; }
相关文章推荐
- Android开发之Serializable 和 Parcelable的区别(源代码分享)
- Android 开发源码分享
- Android 开发源码分享
- Android应用开发揭秘高清版pdf分享(附源码)
- 【安卓开发】Android系统中Parcelable和Serializable的区别
- 【源码分享下载】每日更新之Android快速开发框架LoonAndroid
- Android 开发源码分享
- Android开发:使用序列化接口Parcelable、Serializable实现Activity间传递复杂数据类型参数
- ndk 开发和 android 源码开发的一些小差别。
- Android开发之使用Handler封装下载图片工具类(源码分享)
- Android 开发源码分享
- Android 开发源码分享
- Android 开发源码分享
- Android开发之自己定义TabHost文字及背景(源码分享)
- Android 开发源码分享
- Android 开发源码分享
- Android 开发源码分享
- Android 开发源码分享
- 分享一个可快速开发分享功能Android开源组件源码
- Android开发之大位图二次採样压缩处理(源码分享)