Intent简介
Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行动作和产生事件。使用Intent可以激活Android应用的三个核心组件:活动、服务和广播接收器。
在一个Activity中可以使用系统提供的startActivity(Intent intent)方法打开新的Activity,在打开新的Activity前,你可以决定是否为新的Activity传递参数:
Intent和Activity
打开新的Activity,不传递参数
startActivity(new Intent(MainActivity.this, NewActivity.class));
新建一个显式意图,第一个参数为当前Activity类对象,第二个参数为你要打开的Activity类
Bunder类作用:
Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值。
相对于Map,它提供了各种常用类型的putXxx()/getXxx()方法,
如:putString()/getString()和putInt()/getInt()
putXxx()用于往Bundle对象放入数据,getXxx()方法用于从Bundle对象里获取数据。
Bundle的内部实际上是使用了HashMap<String, Object>类型的变量来存放putXxx()方法放入的值:
public final class Bundle implements Parcelable, Cloneable {
.....
Map<String, Object> mMap;
public Bundle() {
mMap = new HashMap<String, Object>();
......
}
public void putString(String key, String value) {
mMap.put(key, value);
}
public String getString(String key) {
Object o = mMap.get(key);
return (String) o;
........//类型转换失败后会返回null,这里省略了类型转换失败后的处理代码
}
}
在调用Bundle对象的getXxx()方法时,方法内部会从该变量中获取数据,然后对数据进行类型转换,转换成什么类型由方法的Xxx决定,getXxx()方法会把转换后的值返回。
为Intent附加数据的两种写法
用于批量添加数据到Intent
Intent intent = new Intent();
Bundle bundle = new Bundle();//该类用作携带数据
bundle.putString("name", "CSDN");
intent.putExtras(bundle);//为意图追加额外的数据,意图原来已经具有的数据不会丢失,但key同名的数据会被替换
把数据一个个地添加进Intent
这种写法使用起来比较方便,而且只需要编写少量的代码。
Intent intent = new Intent();
intent.putExtra("name", "CSDN");
Intent提供了各种常用类型重载后的putExtra()方法,如: putExtra(String name, String value)、 putExtra(String name, long value),在putExtra()方法内部会判断当前Intent对象内部是否已经存在一个Bundle对象,如果不存在就会新建Bundle对象,以后调用putExtra()方法传入的值都会存放于该Bundle对象,下面是Intent的putExtra(String name, String value)方法代码片断:
public class Intent implements Parcelable {
private Bundle mExtras;
public Intent putExtra(String name, String value) {
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putString(name, value);
return this;
}