android中的launchMode和flag

来源:互联网 发布:中国数学水平 知乎 编辑:程序博客网 时间:2024/05/16 15:49

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数据

0 0
原创粉丝点击