1,Activity的lanchMode
standard:标准模式,每次启动一个新的Activity实例。谁启动Activity就运行在启动它的那个Activity所在的栈中。比如Activity A启动了Activity B,那么B就会在A所在的栈中。所以使用ApplicationContext(非Activity类似的Context)启动standard模式的Activity,会报下面的错误:
原因是ApplicationContext并没有任务栈,因此启动Activity时, 需要指定FLAG_ACTIVITY_NEW_TASK标记位,实际上已经使用了singleTask模式启动。
singleTop:Activity如果在任务栈的栈顶,则Activity不会被创建,同时Activity的onNewIntent的方法会被调用。
singleTask:Activity想要的任务栈中存在,并且栈中有该Activity的实例(Activity可以指定任务栈),那么启动Activity时不会重新创建实例,并且会调用Activity的onNewIntent方法。(备注:该模式下默认具有clearTop的效果,导致所有该Activity上面的Activity出栈。)
singleInstance:加强版singleTask,具有singleTask模式的所有特性,还加强一点,此模式下Activity只能单独位于一个任务栈中。
2,TaskAffinity作用:
这个参数标识了一个Activity所需要的任务栈的名字。默认情况下,所有Activity所需要的任务栈的名字都是包名。也可以单独指定TaskAffinity属性(不能和包名一样,否则和没指定一样)。
3,Activity的Flags
FLAG_ACTIVITY_NEW_TASK : 该标记位作用是指定了"singleTask"启动模式,
FLAG_ACTIVITY_SINGLE_TOP:该标记位作用是指定了"singleTop"启动模式,
FLAG_ACTIVITY_CLEAR_TOP:当指定的Activity被启动时,同一任务栈位于它之上的Activity都会被清除。
FLAG_ACTIVITY_EXCLUB_FROM_RECENTS:启动的Activity不会出现在历史的Activity列表中,某些情况下用户不希望通过历史列表回到我们的Activity
4,IntentFilter的匹配规则
1,一个Activity可以有多个Intent-filter,个一个Intent只要匹配一组Intent-filter可以成功启动对应的Activity
action的匹配规则:
Intent中包含多个action,其中一个action能够和过滤规则中的任何一个action相同就算匹配成功。如果没有指定action,那么会匹配失败。
category的匹配规则
Intent中可以包含多个category,所有的category和过滤规则匹配,则算匹配成功。没有Category也可以匹配成功。默认Intent会加上android.intent.category.DEFAULT这个category,所以intent没有任何category也能匹配成功。(activity】能够接收隐式调用,就必须在intent-filter中指定android.intent.category.DEFAULT这个category)
data的匹配规则
data规则和action类似,如果规则中定义了data,那么intent中必须也要定义可以匹配的data(一一对应)