它是android提供的一个接口。实现它的对象可以通过Intent传递对象。
//比如:
//对象1
......
Intent intent=new Intent(this,otherActivity,class);
intent.putExtra("keyname",implement_parcelable_object);
startActivity(intent);
.......
//对象2
....
Intent intent=getIntent();
Implement_parcelable_object object=intent.getParcelableExtra("keyname");
System.out.println("我们就获得了对象object");
....
实现Parcelable
import android.os.Parcel;
import android.os.Parcelable;
public class myparcel implements Parcelable {
private int value = 0;
//构造函数,构造时需要传入Parcel类型数据,也可以自定义数据类型,一般自定义数据类型
protected myparcel(int x){
value=x;
}
protected myparcel(Parcel in) {
value=in.dataSize();
}
/*这是一个java最经典的用法*/
public void setValue(int x){
value=x;
}
public int getValue() {
return value;
}
//获取对象数据
public static final Creator<myparcel> CREATOR = new Creator<myparcel>() {
@Override
public myparcel createFromParcel(Parcel in) {
in.readInt();//数据位置不能乱,声明顺序就是读写顺序
return new myparcel(in);
}
@Override
public myparcel[] newArray(int size) {
return new myparcel[size];
}
};
@Override
public int describeContents() {
return 0;
}
//打包对象数据
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(value);//数据位置不能乱,声明顺序就是读写顺序
}
}
总结与提升:
parcelable,顾名思义,就是Parcel的接口。而Parcel类才是这一数据分享能够实现的关键。
实现接口:
把数据打包交Parcel类,Parcel 类会将数据序列化存放在自己的内存池中。
然后再定义一个如何从内存池取出数据的办法。
这都是为了函数getParcelableExtra服务的。
获取对象数据:
getIntent.getParcelableExtra("keyname");获取的是接口类型的键值对值,也就是我们传递的对象。
对比
直接用Intent传递数据不香吗?
.....
//senddata
String str="sdjghdajgh";
Intent intent=new(A.class,B.class);
Bundle bundle=new Bundle();
bundle.putInt("key",str);
intent.putExtra(bundle);
startActivity(intent);就可以了
......
//getdata
Intent intent=getIntent();
Bundle bd=intent.getExtras();
String str1=bd.getString("key");
Systen.out.println(str1);
//也可以直接键值队,不需要通过Bundle.
//这些办法主要都是运用了Binder的机制。
不香,人家建议这样传递,因为速度快,最重要的它是可以传递对象的。Serializable与它一样的。只不过速度更慢。
关于Binder机制,可以搜一下,暂时理解不太透彻。