一 序列化原因:
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) ;
}
};
}