标签:
Parcelable是一个接口、用来实现序列化。与此类似的还有一个接口Serializable,这是JavaSE本身支持的,而Parcelable是android特有的。二者比较:
1、Parcelable使用起来稍复杂点,而后者使用起来非常简单。下面例子中会看到。
2、Parcelable效率比Serializable高,支持Intent数据传递,也支持进程间通信(IPC)。
3、Parcelable使用时要用到一个Parcel,可以简单将其看为一个容器,序列化时将数据写入Parcel,反序列化时从中取出。
4、在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable在外界有变化的情况下不能很好的保证数据的持续性。尽管Serializable效率低点,但此时还是建议使用Serializable 。
结合源码及注释进行理解:
Student:
MainActivity:
SecondActivity:
自己实现的:
package com.yangfuhai.asimplecachedemo;
import android.annotation.SuppressLint;
import android.os.Parcel;
import android.os.Parcelable;
/***
* 实现Parcelable接口实例模型
*
* @author Administrator
*
*/
public class Test implements Parcelable {
private int noId;
private String userName;
private String address;
public Test() {
}
@SuppressLint("ParcelCreator")
public Test(int noId, String userName, String address) {
this.noId = noId;
this.userName = userName;
this.address = address;
}
public int getNoId() {
return noId;
}
public void setNoId(int noId) {
this.noId = noId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public static Creator<Test> getCreator() {
return creator;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(noId);
dest.writeString(userName);
dest.writeString(address);
}
public static final Creator<Test> creator = new Creator<Test>() {
@Override
public Test createFromParcel(Parcel source) {
return new Test(source.readInt(), source.readString(),
source.readString());
}
@Override
public Test[] newArray(int size) {
return new Test[size];
}
};
}
public static final Creator<Test> creator=new Creator<Test>() {
@Override
public Test createFromParcel(Parcel source) {
return new Test(source.readInt(),source.readString(),source.readString());
}
@Override
public Test[] newArray(int size) {
return new Test[size];
}
};
}
标签:
原文地址:http://www.cnblogs.com/lenkevin/p/5754371.html