Android: Intent和Bundle的区别
来源:互联网 发布:王者荣耀mvp全新算法 编辑:程序博客网 时间:2024/06/05 07:22
两个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就显得不专业,不灵活的多。
- Android: Intent和Bundle的区别
- Android-Bundle认知、和Intent的区别
- Intent和Bundle的区别
- Intent和Bundle的区别
- Android开发——Intent和Bundle的区别
- (转)Android-Bundle认知、和Intent的区别
- Bundle和Intent.putExtra的区别
- intent.putExtra() 和 bundle.putExtra()的区别
- 区别 Intent 和 Bundle 传值
- Android Bundle的使用及与Intent传递参数区别
- Android-Intent与Bundle在传值上的区别
- Android Bundle的使用及与Intent传递参数区别
- Intent 传值和 Bundle传值的区别
- Intent 传值和 Bundle传值的区别
- Intent 传值和 Bundle传值的区别
- Intent 传值和 Bundle传值的区别
- Intent 传值和 Bundle传值的区别
- Intent 传值和 Bundle传值的区别
- 设置 Linux 的 LD_LIBRARY_PATH 变量
- C++ 学习笔记(一)
- 安装MongoDB
- sqlserver把一列中的多行数据在一行显示
- 桥梁模式
- Android: Intent和Bundle的区别
- Linux Top 命令解析 比较详细
- Android Handler的使用
- C#处理C++库回调报错_非托管代码传递委托被垃圾回收
- .ftl文件 是什么文件
- 《LINUX3.0内核源代码分析》第三章:内核同步(1)
- aop- advice语法结构
- [转]Java Servlet过滤器是什么?
- javascript常用驗證大全