intent翻译为中文的意思是意图,目的。它的作用就是调用某个组件去做某一个事情。比如从当前运行的activity跳转到另一个activity,当前activity要启动一个service或启动一个broadcastreceive(广播接收器),此时就需要用intent来完成。简单的说intent是各个组件的一个桥梁。既然充当了桥梁的角色,那么intent就该可以传递数据,把当前的组件的数据传递到另一个组件去使用,那么intent是如何来传递值的呢?通过Intent类提供的setData()和putExtra()方法传递。前一个参数是uri,是个标识比如一个文件的路径等。后一个参数可以是值也可以是对象,以键值对的形式传递。
ActivityA:
Intent intent=new Intent();
intent.setClass(ActivityA.this,ActivityB.class);
intent.putExtra("extra", "Welcome to ...");
startActivity(intent);
ActivityB:
Intent intent=getIntent();
String stringValue=intent.getStringExtra("extra");
如果把stringValue的值改变,ActivityA中extra所对应的值不会变。
以上的列子是通过putExtra()方法传值的,现在看看对象的传递,是怎么传递的?
ActivityA:
Intent intent=new Intent();
intent.setClass(ActivityA.this,ActivityB.class);
Student s=new Student("shao",20);
intent.putSerializable("STUDENT", s);
startActivity(intent);
ActivityB:
Intent intent=getIntent();
Student s=intent.getSerializable("STUDENT");
现在如果把ActivityB中得到的Student对象s ,改变一个值,如s.setName("yang");那么ActivityA里的s会变吗?不会变,因为intent传递对象时,传递的是一个副本(深拷贝)。
所以在android中,intent进行数据传递时,基本数据类型和对象传递的都是副本,改变传递过来的值,不会改变原来的值。注意的是在进行对象传递的时候,该对象所对应的类要实现Serializable接口或Parcelable接口。