已经写了好多关于Intent的语句了。回想一下,在Activity之间传递数据的时候可以直接在intent.putExtra()中,也可以先放到Bundle中,然后在将Bundle放置到Intent中。
既然都可以存放数据,那么Bundle存在的必要时什么呢? 趁着闲暇时间,为自己解惑。分析如下:
Android中提供了Intent机制来协助应用间的交互与通讯。
Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。
Android中与Intent相关的还有Action/Category及Intent Filter等,另外还有用于广播的Intent
Bundle 存数据:
Bundle bundle = new Bundle();
bundle.putString("userName", "username");
intent = new Intent();
intent.putExtras(bundle);
Bundle 取数据:
Bundle bundle = this.getIntent().getExtras();
String str=bundle.getString("USERNAME");
直接往Intent中 存放数据 的时候:
intent.putExtra("name","realname");
实际上内部是这么实现的---
public Intent putExtra(String name, boolean value) {
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putBoolean(name, value);
return this;
}
直接从Intent中 取数据 的时候:
在Intent中有一个变量: private Bundle mExtras;
在Activity中是用 getIntent.getStringExtra("name")提取上一个Actiivty给此页面传递的数据时,
实质上还是执行了下面的方法:
public String getStringExtra(String name) {
return mExtras == null ? null : mExtras.getString(name);
}
即还是在Bundle中取值.
总结: Intent旨在数据传递,bundle旨在存取数据,
intent内部还是用bundle来实现数据传递的,只是封装了一层而已。
在使用的时候如果需要传递的数据比较多,还是用Bundle来存储数据比较好。毕竟人家是专门做这个的。还有一个好处就是,如果您在ABC三个页面中传值且顺序必须是ABC,直接传递Bundle的数据就好了。而不用在 B 将数据从Intent拿出来,然后封装到新的Intent,传递到C,多此一举。
网友评论