扫码关注官方订阅号
如题,intent 附加数据已经足够强大,为何需要bundle
感谢各位的回应!针对一楼的回答,然后看了下源码,发现Bundle内部其实就是维护了一个Map<String,Object> 而已
因为Intent内部是持有一个Bundle对象的,看一下putExtra()方法的源码就知道了
Bundle
public Intent putExtra(String name, boolean value) { if (mExtras == null) { mExtras = new Bundle(); } mExtras.putBoolean(name, value); return this; }
Intent是Android的一种机制,
Intent
startActivity(Intent intent); startService(Intent service); sendBroadcast(Intent intent); bindService(Intent service, ServiceConnection conn, int flags);
借助Android提供的上述API,我们可以把intent发送给Android,Android收到后会做相应的处理,启动Activity,发送广播给BroadcastReceiver,启动Service或者绑定Service。Intent还可以附加各种数据类型,其中就包括Bundle:Intent.putExtra(String name, Bundle value)
Intent.putExtra(String name, Bundle value)
而Bundle仅仅是一种键值对数据结构,存储字符串键与限定类型值之间映射关系。虽然如此,但仍有应该使用bundle的情景(目前想到2个,应该还有更多):
public class CustomView extends View { // 自定义View旋转时保存数据 @Override protected Parcelable onSaveInstanceState() { super.onSaveInstanceState(); Bundle bundle = new Bundle(); bundle.put... return bundle; } public class CustomActivity extends Activity { // Activity旋转时保存数据 @Override protected void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); savedInstanceState.put... }
比如,某个界面由Fragment搭建,其中包含一个按钮,点击按钮弹出一个DialogFragment,最便捷的方式就是通过Fragment.setArguments(args)传递参数。
Fragment.setArguments(args)
所以,Bundle是不可替代的。
1.intent附加的数据强大吗,只有一些基本类型而已,一到自定义对象的时候就萎了2.看看bundle是什么:A mapping from String values to various Parcelable types.鄙人认为,这个bundle就是个hash表的奇行种,不管你用不用intent,人家已经在哪里好久了,所以不存在“intent 附加数据已经足够强大,为何需要bundle”这种问题。
Bundle在Activity之间传递数据,传递的数据可以是boolean、byte、int、long、float、double、string等基本类型或它们对应的数组,也可以是对象或对象数组。当Bundle传递的是对象或对象数组时,必须实现Serializable 或Parcelable接口。由此看出bundle比intent更强大
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
因为Intent内部是持有一个
Bundle对象的,看一下putExtra()方法的源码就知道了Intent是Android的一种机制,借助Android提供的上述API,我们可以把intent发送给Android,Android收到后会做相应的处理,启动Activity,发送广播给BroadcastReceiver,启动Service或者绑定Service。
Intent还可以附加各种数据类型,其中就包括Bundle:
Intent.putExtra(String name, Bundle value)而Bundle仅仅是一种键值对数据结构,存储字符串键与限定类型值之间映射关系。
虽然如此,但仍有应该使用bundle的情景(目前想到2个,应该还有更多):
使用Bundle的场景1:在设备旋转时保存数据
使用Bundle的场景2:从Fragment传递数据到另一Fragment
比如,某个界面由Fragment搭建,其中包含一个按钮,点击按钮弹出一个DialogFragment,
最便捷的方式就是通过
Fragment.setArguments(args)传递参数。所以,
Bundle是不可替代的。1.intent附加的数据强大吗,只有一些基本类型而已,一到自定义对象的时候就萎了
2.看看bundle是什么:A mapping from String values to various Parcelable types.
鄙人认为,这个bundle就是个hash表的奇行种,不管你用不用intent,人家已经在哪里好久了,所以不存在“intent 附加数据已经足够强大,为何需要bundle”这种问题。