Android: Intent和Bundle的区别

两个Activity之间传递数据,数据的附加有两种方式:

一种是直接 intent.putxx(); 

另一种是  先bundle.putxx(), 然后再调用public Intent putExtras (Bundle extras)  添加bundle.


其实两种的本质是一样的。


Intent的方法:

    public Intent putExtra(String name, boolean value);
    public Intent putExtra(String name, byte value);
    public Intent putExtra(String name, char value);
    public Intent putExtra(String name, short value);
    public Intent putExtra(String name, int value);
    public Intent putExtra(String name, long value);
    public Intent putExtra(String name, float value);
    public Intent putExtra(String name, double value);
    public Intent putExtra(String name, String value);
    public Intent putExtra(String name, CharSequence value);
    public Intent putExtra(String name, Parcelable value);
    public Intent putExtra(String name, Parcelable[] value);
    ...

intent内部定义了很多put方法,功能都是把key-value存进来。具体put函数的内部实现:

    public Intent putExtra(String name, boolean value) {
        if (mExtras == null) {
            mExtras = new Bundle();
        }
        mExtras.putBoolean(name, value);
        return this;
    }
其中mExtras是intent内部定义的一个private Bundle变量。

可以看到,intent其实是调用了bundle相应的put函数,也就是说,intent内部还是用bundle来实现数据传递的,只是封装了一层而已。


再来说Bundle:

    public void putBoolean(String key, boolean value);
    public void putByte(String key, byte value);
    public void putChar(String key, char value);

    ...

再来看用法:

只用intent:类型什么的是不需要你来操心的,你只需要putExtra就好了,内部会都存在一个bundle对象中。key-value对是一个一个被加进去的。

用intent和bundle:key-value对先被一个个的加到bundle里面,再把这个bundle put到intent中,其中用了下面这个函数:

    public Intent putExtras(Bundle extras) {
        if (mExtras == null) {
            mExtras = new Bundle();
        }
        mExtras.putAll(extras);
        return this;
    }
可以看到,其实是把之前那个bundle中的数据批量添加到intent内部的bundle中。

取数据的时候,可以一个个的取出来(这个不赘述了),也可以把数据打包一起取出来:

    public Bundle getExtras() {
        return (mExtras != null)
                ? new Bundle(mExtras)
                : null;
    }

这个函数是把当前intent中所有的数据一起打包的(假如说你既用了bundle也用了intent本身的put函数来加数据,最后用get函数返回的是bundle+其他数据一起的)。

两者的区别是什么,如果你想对数据进行比较灵活的操作(批量操作什么的)的话就用bundle吧,当然你也可以getIntent()之后直接添加数据然后把这个intent发送出去。
还有就是,Bundle是可以对对象进行操作的,而Intent不可以。Bundle相对于Intent比较偏下层,比Intent接口更多,更灵活,但Bundle仍需要借助Intent才能在Activity之间传递。

概括一下,Intent旨在数据传递,bundle旨在存取数据,当然intent也提供一部分数据的存取,但比起bundle就显得不专业,不灵活的多。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值