Android中實現序列化有兩種方式,一種是使用Serializable另一種就是Parcelable了。
Serializable本身就是JavaSE支持的,Parcelable是Android特有的,效率比Serializable高,據統計一般情況下能快10倍左右!但是Parcelable不能用在需要數據永久儲存的情況,比如存到本地文件中,Parcelable不能保證在外界有變化的時候數據的持續性。本文分別對這兩種方法結合示例進行講解。
新建兩個Activity,一個是MainActivity,一個是ReceiveObjectActivity,我們把Person對象從MainActivity中傳送到ReceiveObjectActivity。
Serializable
import java.io.Serializable;
/**
* Created by SparkYuan on 10/12/2015.
*/
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
sendObjectBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Person person = new Person("Spark",23);
Intent intent = new Intent(getApplicationContext(),ReceiveObjectActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("person",person);
intent.putExtra("bundle",bundle);
startActivity(intent);
}
});
在ReceiveObjectActivity的onCreate()方法中
Intent intent = getIntent();
Person person = (Person)intent.getBundleExtra("bundle").getSerializable("person");
Log.d("Debug",person.getName());
Parcelable
import android.os.Parcel;
import android.os.Parcelable;
/**
* Created by Daniel on 10/12/2015.
*/
public class Person implements Parcelable {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>(){
@Override
//實現從Parcel容器中讀取傳遞數據值,封裝成Parcelable對象返回
public Person createFromParcel(Parcel source) {
return new Person(source.readString(),source.readInt());
}
@Override
//供外部類反序列化本類數組使用
public Person[] newArray(int size) {
return new Person[size];
}
};
}
sendObjectBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Person person = new Person("Spark",23);
Intent intent = new Intent(getApplicationContext(),ReceiveObjectActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelable("person",person);
// bundle.putSerializable("person",person);
intent.putExtra("bundle",bundle);
startActivity(intent);
}
});
在ReceiveObjectActivity的onCreate()方法中
Intent intent = getIntent();
Person person = (Person)intent.getBundleExtra("bundle").getParcelable("person");
Log.d("Debug",person.getName());