Serializable序列化数据
- 这是一种比较简单的序列化,只需要将要序列化的类实现Serializable接口,不用再执行其他操作,在Intent中放入序列化数据即可
- 序列化数据
public class Student implements Serializable{
private String name;
private String age;
private String sex;
public Student(String name, String age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
//放入数据
Student lisi=new Student("李四","25","女")
intent.putExtra("lisi",lisi)
//取出数据
Student lisi= (Student) intent.getSerializableExtra("lisi")
System.out.println(lisi.getName())
Parcelable序列化数据
- 序列化数据,由于as很智能,基本的复写方法,也会帮我们自动生成
public class People implements Parcelable{
private String name;
private String age;
private String sex;
public People(String name, String age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public static final Creator<People> CREATOR = new Creator<People>() {
@Override
public People createFromParcel(Parcel in) {
return new People(in);
}
@Override
public People[] newArray(int size) {
return new People[size];
}
};
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public int describeContents() {
return 0;
}
protected People(Parcel in) {
name = in.readString();
age = in.readString();
sex = in.readString();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(age);
dest.writeString(sex);
}
}
//放入数据
People zhangsan=new People("张三","20","男")
intent.putExtra("zhangsan",zhangsan)
//取出数据
Intent intent=getIntent()
People zhangsan= (People) intent.getParcelableExtra("zhangsan")
textView.setText(zhangsan.getName()+zhangsan.getAge()+zhangsan.getSex())
二者区别
- 从编写上来讲Serializable序列化更比较书写简单,但是Serializable同时效率会比较低,因为Serializable原本是java中用来序列化的接口
- Parcelable虽然编写略复杂,但是由于as的存在,让这些复杂都不在复杂,并且其效率更高,因此建议使用Parcelable序列化来传递数据。