一、Activity四种启动模式
- standard:所有activity都在同一个task栈中。每次启动activity,都会生成一个新的activity实例,每次启动activity都会执行onCreate方法。
- singleTop:所有activity都在同一个task栈中。启动activity时,如果该activity实例已经存在于栈顶,则复用该activity实例,不会执行onCreate方法,执行onNewIntent方法;否则,生成一个新的activity实例,执行onCreate方法。
- singleTask:所有activity都在同一个task栈中。启动activity时,如果该activity实例已经存在于栈中,则复用该activity实例,同时弹出该activity上面的所有实例,不会执行onCreate方法,执行onNewIntent方法;否则,生成一个新的activity实例,执行onCreate方法。
- singleInstance模式:会在一个新的task栈中启动该activity实例,且这个栈中有且只能有这一个activity实例,启动activity时,如果该activity实例已经存在于栈中,则复用该activity实例,同时弹出该activity上面的所有实例,不会执行onCreate方法,执行onNewIntent方法;否则,生成一个新的activity实例,执行onCreate方法。
二、Activity重要的启动标识
- Intent.FLAG_ACTIVITY_NEW_TASK:在一个新的task栈中启动activity,但是并不是一定会在一个新的task栈中启动activity。如果系统为该activity找到一个极具亲和力(taskAffinity的值相等)的task栈,就不会在新的task栈中启动Activity,非Activity的四大组件启动Activity要添加该标识。
- Intent.FLAG_ACTIVITY_CLEAR_TOP:清空当前task栈中,该activity之上的所有activity实例。
- 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方法。
- Intent.FLAG_ACTIVITY_CLEAR_TASK:清空当前task栈中,所有activity实例。
- Intent.FLAG_ACTIVITY_CLEAR_TASK + Intent.FLAG_ACTIVITY_NEW_TASK:清空当前task栈。然后在一个新的task栈中启动activity,但是并不是一定会在一个新的task栈中启动activity。如果系统为该activity找到一个极具亲和力(taskAffinity的值相等)的task栈,就不会在新的task栈中启动Activity。
- 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时完成