Activity启动模式

303 阅读2分钟

一、Activity四种启动模式

  1. standard:所有activity都在同一个task栈中。每次启动activity,都会生成一个新的activity实例,每次启动activity都会执行onCreate方法。
  2. singleTop:所有activity都在同一个task栈中。启动activity时,如果该activity实例已经存在于栈顶,则复用该activity实例,不会执行onCreate方法,执行onNewIntent方法;否则,生成一个新的activity实例,执行onCreate方法。
  3. singleTask:所有activity都在同一个task栈中。启动activity时,如果该activity实例已经存在于栈中,则复用该activity实例,同时弹出该activity上面的所有实例,不会执行onCreate方法,执行onNewIntent方法;否则,生成一个新的activity实例,执行onCreate方法。
  4. singleInstance模式:会在一个新的task栈中启动该activity实例,且这个栈中有且只能有这一个activity实例,启动activity时,如果该activity实例已经存在于栈中,则复用该activity实例,同时弹出该activity上面的所有实例,不会执行onCreate方法,执行onNewIntent方法;否则,生成一个新的activity实例,执行onCreate方法。

二、Activity重要的启动标识

  1. Intent.FLAG_ACTIVITY_NEW_TASK:在一个新的task栈中启动activity,但是并不是一定会在一个新的task栈中启动activity。如果系统为该activity找到一个极具亲和力(taskAffinity的值相等)的task栈,就不会在新的task栈中启动Activity,非Activity的四大组件启动Activity要添加该标识。
  2. Intent.FLAG_ACTIVITY_CLEAR_TOP:清空当前task栈中,该activity之上的所有activity实例。
  3. Intent.FLAG_ACTIVITY_SINGLE_TOP:一般和Intent.FLAG_ACTIVITY_CLEAR_TOP一起使用,只用Intent.FLAG_ACTIVITY_CLEAR_TOP当前Activity会执行onCreate方法,Intent.FLAG_ACTIVITY_CLEAR_TOP + Intent.FLAG_ACTIVITY_SINGLE_TOP组合使用,当前Activity不会执行onCreate方法,而是执行onNewIntent方法。
  4. Intent.FLAG_ACTIVITY_CLEAR_TASK:清空当前task栈中,所有activity实例。
  5. Intent.FLAG_ACTIVITY_CLEAR_TASK + Intent.FLAG_ACTIVITY_NEW_TASK:清空当前task栈。然后在一个新的task栈中启动activity,但是并不是一定会在一个新的task栈中启动activity。如果系统为该activity找到一个极具亲和力(taskAffinity的值相等)的task栈,就不会在新的task栈中启动Activity。
  6. Intent.FLAG_ACTIVITY_CLEAR_TOP + Intent.FLAG_ACTIVITY_NEW_TASK联合使用:清空当前task栈中,该activity之上的所有activity实例。然后在一个新的task栈中启动activity,但是并不是一定会在一个新的task栈中启动activity。如果系统为该activity找到一个极具亲和力(taskAffinity的值相等)的task栈,就不会在新的task栈中启动Activity。

三、taskAffinity属性

taskAffinity:指定task栈的名字,默认值为包名

四、noHistory属性

noHistory:值为true或false,默认为false,如果值true时不会保留Activity的历史。例如A>B>C,B的noHistory属性值为true,C返回后时A。B的onDestroy方法会在进入C时完成