Parcelable 的理解

  1. 它是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");
....
  1. 实现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);//数据位置不能乱,声明顺序就是读写顺序
    }
}
  1. 总结与提升:

parcelable,顾名思义,就是Parcel的接口。而Parcel类才是这一数据分享能够实现的关键。

实现接口:

把数据打包交Parcel类,Parcel 类会将数据序列化存放在自己的内存池中。

然后再定义一个如何从内存池取出数据的办法。

这都是为了函数getParcelableExtra服务的。

获取对象数据:

getIntent.getParcelableExtra("keyname");获取的是接口类型的键值对值,也就是我们传递的对象。

  1. 对比

直接用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机制,可以搜一下,暂时理解不太透彻。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值