android中的launchMode和flag
standard :标准模式,只要start一个activity就new一个实例入栈
singleTop :当start的activity在栈顶时就不new,复用原实例,此时调用onNewIntent取得intent信息
singleTask :activity只有唯一实例,start到该实例时,会finish掉其上面的其他activity,同样调用onNewIntent
singleInstance :该activity只有唯一实例,且独享一个task,start到其他activity时会创建新task,当第一次start到该实例时,也会创建独享的task,再次start该activity时会切换task顺序,但不影响原task中各activity的顺序
flag:
参考:http://www.cnblogs.com/xiaoQLu/archive/2012/07/17/2595294.html
-
FLAG_ACTIVITY_BROUGHT_TO_FRONT//
通常在应用代码中不需要设置这个FLAG,当launchMode为singleTask时系统会默认设置这个标志。FLAG_ACTIVITY_CLEAR_TASK//
含有待启动Activity的Task在Activity被启动前清空。也就是说,这个Activity会成为一个新的root,并且所有旧的activity都被finish掉,只能与 FLAG_ACTIVITY_NEW_TASK 一起使用// 解释太难理解了,其实就是迎接新世界,过去的都CLEAR了-
FLAG_ACTIVITY_CLEAR_TOP// 相当于singleTask,会finish掉top上的activity
-
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET// 当task重置时,内部记录的activity全部clear掉
-
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS // 新开的不记录到最近应用历史栈中(长按HOME键的那个历史栈)
-
FLAG_ACTIVITY_FORWARD_RESULT // 应用场是A forResult启动了B,而B再用这个flag启动C,则C来返回result给A
-
FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY // 通常应用不用设置,系统调用,比如长按HOME键从历史记录中启动
-
FLAG_ACTIVITY_MULTIPLE_TASK// Do not use this flag unless you are implementing your own top-level application launcher
-
FLAG_ACTIVITY_NEW_TASK// 若欲启动的与原task不属于同亲属关系,则new一个task
-
FLAG_ACTIVITY_NO_ANIMATION
-
FLAG_ACTIVITY_NO_HISTORY// 不在task中保存其回退历史
-
FLAG_ACTIVITY_NO_USER_ACTION// 新的ACTIVITY切到前台时,阻止onUserLeaveHint()回调
-
FLAG_ACTIVITY_PREVIOUS_IS_TOP// 当前ACTIVITY不作为TOP,上一个作TOP,新开的将可能代替掉当前,成为TOP
-
FLAG_ACTIVITY_REORDER_TO_FRONT // 若原栈中存在欲启动的activity,则移到栈顶
-
-
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED // 新开ACTIVITY将会成为TASK的TOP,然后被置于栈的FRONT DOOR,即为重置
-
-
FLAG_ACTIVITY_SINGLE_TOP// 相当于singleTop,
-
FLAG_ACTIVITY_TASK_ON_HOME// 必须和NEW_TASK连用,新开ACTIVITY会放置在HOME ACTIVITY的TASK的TOP上,效果如果BACK将一定回退到HOME
-
onUserLeaveHint()主要是用户主观意图时调用,比如按HOME键最小化时(可以在这里添加NOTIFICAITON到通知栏表示程序后台运行),ACTIVITY切换(startActivity,finish原来的)等情况
PendingIntent的flag:
nt FLAG_CANCEL_CURRENT:如果该PendingIntent已经存在,则在生成新的之前取消当前的。会重新new 一个intent
int FLAG_NO_CREATE:如果该PendingIntent不存在,直接返回null而不是创建一个PendingIntent.
int FLAG_ONE_SHOT:该PendingIntent只能用一次,在send()方法执行后,自动取消。
int FLAG_UPDATE_CURRENT:如果该PendingIntent已经存在,则用新传入的Intent更新当前的数据。会更新extras数据