java intent bundle_Android中传值Intent与Bundle的区别小结

前言

Bundle 翻译成中文的意思是“捆绑”,常用在Activity间传递参数,之前一开始并不太待见,原因是Intent本身就可以传递,Intent.putExtra("key", value),为何还要用Bundle呢?

正巧小伙伴问Android传值Intent和Bundle区别,特此总结下:

Intent与Bundle在传值上的区别

首先从使用上:

Intent方式:

假设需要将数据从页面A传递到B,然后再传递到C。

A页面中:

Intent intent=new Intent(MainActivity.this,BActivity.class);

intent.putExtra("String","MainActivity中的值");

intent.putExtra("int",11);

startActivity(intent);

B页面中:

需要先在B页面中接收数据

Intent intent = getIntent();

string = intent.getStringExtra("String");

key = intent.getIntExtra("int",0);

然后再发数据到C页面

Intent intent=new Intent(BActivity.this,CActivity.class);

intent.putExtra("String1",string);

intent.putExtra("int1",key);

intent.putExtra("boolean",true);

startActivity(intent);

可以看到,使用的时候不方便的地方是需要在B页面将数据一条条取出来然后再一条条传输给C页面。

而使用Bundle的话,在B页面可以直接取出传输的Bundle对象然后传输给C页面。

Bundle方式:

A页面中:

Intent intent = new Intent(MainActivity.this, BActivity.class);

Bundle bundle = new Bundle();

bundle.putString("String","MainActivity中的值");

bundle.putInt("int",11);

intent.putExtra("bundle",bundle);

startActivity(intent);

在B页面接收数据:

Intent intent = getIntent();

bundle=intent.getBundleExtra("bundle");

然后在B页面中发送数据:

Intent intent=new Intent(BActivity.this,CActivity.class);

//可以传给CActivity额外的值

bundle.putBoolean("boolean",true);

intent.putExtra("bundle1",bundle);

startActivity(intent);

总结:

Bundle可对对象进行操作,而Intent是不可以。Bundle相对于Intent拥有更多的接口,用起来比较灵活,但是使用Bundle也还是需要借助Intent才可以完成数据传递总之,Bundle旨在存储数据,而Intent旨在传值。

然后看下intent的put方法源码:

public @NonNull Intent putExtra(String name, Parcelable value) {

if (mExtras == null) {

mExtras = new Bundle();

}

mExtras.putParcelable(name, value);

return this;

}

可以看到其实内部也是使用的Bundle来传输的数据。

题外话

为什么Bundle不直接使用Hashmap代替呢?

Bundle内部是由ArrayMap实现的,ArrayMap的内部实现是两个数组,一个int数组是存储对象数据对应下标,一个对象数组保存key和value,内部使用二分法对key进行排序,所以在添加、删除、查找数据的时候,都会使用二分法查找,只适合于小数据量操作,如果在数据量比较大的情况下,那么它的性能将退化。而HashMap内部则是数组+链表结构,所以在数据量较少的时候,HashMap的Entry Array比ArrayMap占用更多的内存。因为使用Bundle的场景大多数为小数据量,我没见过在两个Activity之间传递10个以上数据的场景,所以相比之下,在这种情况下使用ArrayMap保存数据,在操作速度和内存占用上都具有优势,因此使用Bundle来传递数据,可以保证更快的速度和更少的内存占用。

另外一个原因,则是在Android中如果使用Intent来携带数据的话,需要数据是基本类型或者是可序列化类型,HashMap使用Serializable进行序列化,而Bundle则是使用Parcelable进行序列化。而在Android平台中,更推荐使用Parcelable实现序列化,虽然写法复杂,但是开销更小,所以为了更加快速的进行数据的序列化和反序列化,系统封装了Bundle类,方便我们进行数据的传输。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: IntentBundleAndroid 开发常用的两种数据传递方式,它们的区别在于 Intent 是用于不同组件之间传递数据的,而 Bundle 则是用于同一组件不同方法之间传递数据的。具体来说,Intent 可以用于启动一个新的 Activity,并将数据传递给它,而 Bundle 则通常用于在一个 Activity 内部的不同方法之间传递数据。同时,Intent 还可以用于指定目标组件的详细信息(如 Activity 的类名、Action、Category 等),而 Bundle 则只是一个用于存储键值对的容器。 ### 回答2: IntentBundle都是Android用于Activity之间传递数据的方法,它们之间的区别和联系如下: IntentAndroid开发常用的跳转或者启动Activity的方法,使用Intent传值,需要在调用目标Activity时通过Intent将需要传递的数据一一加入Intent,然后再在被调用Activity的onCreate()方法获取这些值。Intent传递数据的方式有两种:一种是通过putExtra()方法加入数据,并通过getExtra()方法获取相应的数据;另一种是通过自定义Parcelable类,将对象作为IntentExtra进行传递。此外,Intent也可以携带Bundle类型的Extra数据,进行传递和获取。 Bundle是一种用于Android传递数据的容器类,它可以携带多组数据,并以键值对的形式存在。和Intent不同的是,Bundle主要是用于在同一个Activity进行数据传递,将数据打包成“包裹”(Bundle)的形式,然后在需要的地方进行接收。BundleIntent都可以携带数据,但是主要作用是不同的,Intent的主要作用是进行Activity之间的跳转和数据传递,而Bundle的主要作用是在同一个Activity传递数据。 综上所述,IntentBundle都是为了在Android应用传递数据而作的。有了Intent,我们可以在不同的Activity之间实现数据的传递和跳转;有了Bundle,我们可以在同一个Activity轻松地传递多个数据。两种方式各有自己的用途,使用时需要根据需求选择合适的一种方法。 ### 回答3: 在Android开发IntentBundle都可以用来传递数据,但是两者有很多不同之处。 IntentAndroid系统的一种消息传递机制,用于在不同组件之间传递消息。它可以用来启动一个Activity、Service、BroadcastReceiver或者是开启一个隐式的组件。Intent可以传递任何类型的数据,包括基本类型,序列化对象和自定义数据类型。Intent可以使用putExtra()方法传递数据,也可以使用setData()指定数据URI。在使用Intent传递数据时,需要注意Intent的生命周期,如果在Activity onActivityResult()方法里接收数据,需要在startActivityForResult()方法设置请求码,在返回数据时readFromIntent()方法获取数据。 BundleAndroid的一个键值对的集合,用于在同一组件传递数据。Bundle通常用于在一个Activity向另一个Activity传递数据。它也可以传递任何类型的数据,包括基本类型、序列化对象和自定义数据类型。Bundle使用put()方法传递数据,可以使用不同的键名来指定不同的数据类型。在使用Bundle传递数据时,需要注意Bundle的生命周期,如果在onCreate()方法获取数据,需要在启动另一个Activity之前将数据放入Bundle。 总的来说,IntentBundle都可以用来传递数据,在不同的场景下有不同的用途和限制。使用Intent可以在不同组件之间传递数据,但是需要注意Intent的生命周期;使用Bundle可以在同一个Activity传递数据,但是需要注意Bundle的生命周期。因此,在使用IntentBundle时,需要根据实际情况选择合适的方式来传递数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值