Android Bundle传递数据

本文介绍了Android中Bundle的使用,主要用于传递数据,包括基本类型、实现了Serializable或Parcelable接口的对象。详细讲解了如何通过putXxx()和getXxx()方法进行读写操作,以及Parcelable接口的实现过程,包括describeContents()、writeToParcel()方法,以及Parcelable.Creator接口的两个方法。此外,还对比了Parcelable和Serializable的性能差异,以及如何传递Serializable类型的对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Bundle 是用来传递数据的,其以key-value保存数据,可以传递boolean,byte,int,long,float,double,string等基本类型或他们对应的数组,也可以是对象或对象数组,但必须实现Seriallzable或Parcelable接口。

传递基本类型:putXxx()和getXxx()方法,用于基本的读写操作。

写操作:

 MainFragment fragment = new MainFragment();
        Bundle args = new Bundle();
        args.putString("DEMO_PRESET", demoPreset.name());
        fragment.setArguments(args);
        return fragment;

对应的读取数据:用getXxx()方法,例如String xx=bundle.getString(key),

传递Parcelable接口其典型实现为

 public class MyParcelable implements Parcelable {
     private int mData;

     public int describeContents() {
         return 0;
     }

     public void writeToParcel(Parcel out, int flags) {
         out.writeInt(mData);
     }

     public static final Parcelable.Creator<MyParcelable> CREATOR
             = new Parcelable.Creator<MyParcelable>() {
         public MyParcelable createFromParcel(Parcel in) {
             return new MyParcelable(in);
         }

         public MyParcelable[] newArray(int size) {
             return new MyParcelable[size];
         }
     };

     private MyParcelable(Parcel in) {
         mData = in.readInt();
     }
 }

1.describeContents方法。内容接口描述,默认返回0就可以;
2.writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.即打包需要传递的数据到Parcel容器保存,以便从parcel容器获取数据,该方法声明如下:
writeToParcel(Parcel out, int flags) 具体参数含义见doc文档https://developer.android.com/reference/android/os/Parcelable
3.静态的Parcelable.Creator接口,本接口有两个方法:
createFromParcel(Parcelin)  从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层。
newArray(int size) 创建一个长度为size的数组,仅一句话(return new myParcelable[size])即可。方法是供外部类反序列化本类数组使用。 

 传递Serializable类型的对象

// MyObjects instance
MyObjects mObjects = new MyObjects("name", "age", "Address array here");

// Passing MyObjects instance via intent
Intent mIntent = new Intent(FromActivity.this, ToActivity.class);
mIntent.putExtra("UniqueKey", mObjects);
startActivity(mIntent);
// Getting MyObjects instance
Intent mIntent = getIntent();
MyObjects workorder = (MyObjects)   
 mIntent.getSerializableExtra("UniqueKey");

 

为什么Android提供了2个用于序列化对象的接口?

  1. ParcelableSerializable接口快
  2. ParcelableSerializable接口相比,接口需要更多时间来实现
  3. Serializable 界面更容易实现
  4. Serializable 接口会创建大量临时对象,并导致相当多的垃圾回收
  5. Parcelable 数组可以通过Android中的Intent传递
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值