与显式Intent相比隐式Intent是一种比较含蓄的Intent。它不指定要启动哪个活动,而是通过配置一些相关信息如:action,category等信息,然后交给系统去分析并找出合适的活动去启动。
Action:用来指明要实施的动作是什么,比如说ACTION_VIEW, ACTION_EDIT等。具体的可以查阅android SDK-> reference中的Android.content.intent类,里面的constants中定义了所有的action。
一些常用的Action:
ACTION_CALL 启动一个电话.
ACTION_EDIT 显示用户编辑的数据.
ACTION_MAIN 作为Task中第一个Activity启动
ACTION_SYNC 同步手机与数据服务器上的数据.
ACTION_BATTERY_LOW 电池电量过低警告.
ACTION_HEADSET_PLUG 插拔耳机警告
ACTION_SCREEN_ON 屏幕变亮警告.
ACTION_TIMEZONE_CHANGED 改变时区警告.
Category:一个字符串,包含了关于处理该intent的组件的种类的信息。一个intent对象可以有任意个category。intent类定义了许多category常数.
addCategory()方法为一个intent对象增加一个category,
removeCategory删除一个category,
getCategories()获取intent所有的category.
Intent intent = new Intent("android.intent.action.ALL_APPS"); |
5 | intent.addCategory("com.example.intent_test.MY_CATEGORY"); |
6 | startActivity (intent); |
7 | } |
standard
标准启动模式,也是activity的默认启动模式。在这种模式下启动的activity可以被多次实例化,即在同一个任务中可以存在多个activity的实例,每个实例都会处理一个Intent对象。如果Activity A的启动模式为standard,并且A已经启动,在A中再次启动Activity A,即调用startActivity(new Intent(this,A.class)),会在A的上面再次启动一个A的实例,即当前的桟中的状态为A-->A。
singleTop
如果一个以singleTop模式启动的activity的实例已经存在于任务桟的桟顶,那么再启动这个Activity时,不会创建新的实例,而是重用位于栈顶的那个实例,并且会调用该实例的onNewIntent()方法将Intent对象传递到这个实例中。举例来说,如果A的启动模式为singleTop,并且A的一个实例已经存在于栈顶中,那么再调用startActivity(new Intent(this,A.class))启动A时,不会再次创建A的实例,而是重用原来的实例,并且调用原来实例的onNewIntent()方法。这是任务桟中还是这有一个A的实例。
如果以singleTop模式启动的activity的一个实例已经存在与任务桟中,但是不在桟顶,那么它的行为和standard模式相同,也会创建多个实例。singleTask让某个活动在程序的整个上下文只存在一个实例,当为此模式的时候,每次启动该活动的时候会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用,并把在这个活动上的所以活动都出栈,如果没有则创建一个新的活动实例
singleInstance
总是在新的任务中开启,并且这个新的任务中有且只有这一个实例,也就是说被该实例启动的其他activity会自动运行于另一个任务中。当再次启动该activity的实例时,会重用已存在的任务和实例。并且会调用这个实例的onNewIntent()方法,将Intent实例传递到该实例中。和singleTask相同,同一时刻在系统中只会存在一个这样的Activity实例。指定为这种模式的时候会启用一个新的返回栈来管理这个活动这种的模式的目的是让其他程序和我们的程序来共享这个活动的实例