一个activity启动另一个activity最简单的方法就是使用startActivity(Intent)方法,activity调用这个方法时,嗲用请求实际发送给了操作系统的ActivityManager。ActivityManager负责创建Activity实例并调用其onCreate(Bundle)方法。
ActivityManager该启动哪个activity就在于传入startActivity(Intent)方法的Intent参数。
intent对象是component用来与操作系统通信的一种媒介工具,activity就是一种component。intent可以使用一下构造方法来告诉ActivityManager该启动哪个activity:
public Intent(Context packageContext,Class<?> cls)
传入该方法的Class类型参数告诉ActivityManager应该启动哪个activity;Context参数告诉ActivityManager在哪里可以找到它。在启动activity之前,ActivityManager会确认指定的Class是否在manifest配置文件中声明。
intent分为显示intent和隐式intent。如果通过指定Context对象与Class对象,然后调用intent的构造方法来创建Intent,则创建的是显示intent。在同一应用中,我们使用显示intent来启动activity。一个应用的activity如需启动另一个应用的activity,可通过创建隐式intent来处理。
使用intent extra
extra信息附加在传入stratActivity(Intent)方法的Intent上发送出去,可以是任意数据,接收方activity接收到操作系统转发的intent后,访问并获取其中的extra信息。要将extra数据信息添加个intent,需要调用如下方法:
public Intent putExtra(String name,boolean value)
该方法形式多变,但它总有两个参数,一个参数是固定为String类型的键,另一个参数是键值,可以是多种数据类型。该方法返回intent自身,因此,需要时可进行链式调用。activity可能启动自不同的地方,所以,应该在获取和使用extra信息的activity那里,为它定义键,用包名修饰extra数据信息,这样,可以避免来自不同应用的extra间发生命名冲突。
要从extra获取数据,会用到如下方法:
public boolean getBooleanExtra(String name,boolean defaultValue)
第一个参数是extra的名字,第二个参数是指定默认值,它在无法获得有效键值时使用。