Intent和Bundle的区别

2017-04-19  本文已影响0人  芽芸

已经写了好多关于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,多此一举。

上一篇下一篇

猜你喜欢

热点阅读