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;
}
}
相关文章推荐
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
- [Android]Parcelable encountered IOException writing serializable object (name = xxx)
- Serializable、Externalizable、Parcelable实现
- Parcelable vs Serializable
- Android Parcelable和Serializable的区别
- Serializable 和 Parcelable 区别
- 序列化接口:Serializable 、Parcelable
- Android使用序列化接口Parcelable、Serializable
- android activity之间传递对象(Serializable 和 Parcelable)
- Android Parcelable和Serializable的区别
- android序列化之Serializable,Parcelable
- Android中序列化的Parcelable与Serializable区别及其AS插件
- java.lang.RuntimeException: Parcelable encountered IOException writing serializable object
- Android中Serializable和Parcelable序列化对象详解
- Android系统中Parcelable和Serializable的区别
- Android Parcelable与Serializable详解及区别
- Android中Serializable和Parcelable序列化对象详解
- 序列化Serializable和Parcelable的理解和区别
- 序列化 Serializable和Parcelable用法及区别