您的位置:首页 > 其它

serializable和Parcelable

2018-03-22 17:44 375 查看
1.首先搞清楚为什么要序列化:为了传递对象;将对象的引用放入Bundle,从而用Intent将对象传递给需要对象的地方如Activity或者fragment;2.他们俩有啥区别呢:   Serializable是Java自带的,将一个对象传化成可传输或可存储的状态,可以用于网络传输,以及本地存储等; Parcelable是专门为Android服务的,是将一个完整的对象分解,每一部分都是Intent所支持的传输类型,这样就能达到传输对象的目的了;Parcelable能达到永久性的保存对象到本地文件,也能实现网络传输对象;   选择序列化的原则:①.在内存方面尽量选择Parcelable,因为Serializable序列化会大量的产生临时变量,这样会频繁的GC造成卡顿;②.如果要将数据存储到存储设备或者网络传输,尽量采用Serializable;③.像Activity之间简单的数据传输,可以直接采用Intent;但是涉及到复杂的数据,就要采用Parcelable;下面举一个Serializable的例子:
public class Person implements Serializable{
private static final long serialVersionUID = 7382351359868556980L;
在这里进行get  set等等
}
public class MainActivity extends Activity{
onCreate(){
在这里初始化等等
Intent i=new Intetn(this,XXX.class);
Person  person=new Person();
person.setXXX();
person.setXX();
i.putExtra("标识1",person);
//或者使用Bundle将Person数据打包
Bundle b=new Bundle();
b.putSerialzale("标识2",person);
i.putExtras(b);
//
}
}
public class A extends Activity{
onCreate(){
Intent intent=getIntent();
//通过以下这种方式来获取 对象;
Person per=intent.getSerilizableExtra("标识1");
Person per2=intent.getSerilizableExtra("标识2");
}
}
再举一个Parcelable例子:
public class Pen implements Parcelable{
private Integer id;
private String name;
private String pass;
//实现Parcelable接口必须实现的方法:
//这是个内容描述接口,基本不用管,返回0即可;
public int describeContents(){
return 0;
}
//实现Parcelable接口必须实现的方法:
//这是写入接口,把数据打包,将Pen的对象写进Parcel对象;
public void writeToParcel(Parcel dest,int flags){
des.writeInt(id);
des.writeString(name);
des.writeString(pass);
}
//也是实现接口要求重写的
public static final Parcelable.Creator<Pen> CREATOR=new Parcelable.Creator<Pen>(){
//刚刚writeToParcel是将原本的对象转为Parcel对象,这一步是将Parcel对象读出Pen对象;写和读的顺序一样,所以每个变量必须一一对齐;
public Pen createFromParcel(Parcel source){
return new Pen(source.readInt(),source.readString(),source.readString());
}
public Pen[] newArray(int size){
return new Pen[size];
}
}
实现构造函数
public Pen(){
}
public Pen(Integer id,String name,String pass){
super();
this.id=id;
this.name=name;
this.pass=pass;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: