谈一下我对Acitivity启动模式的理解。
启动模式有如下4种:
standard,singleTop,singleTask,singleInstance。
1.standard
标准模式,也是默认模式,每次启动一个Activity,都会重新创建一个新实例;都会走onCreate(),onStart(),onResume()
2.singleTop
栈顶复用模式,如果Activity已经在栈顶,则不创建新的Activity,栈顶Activity的onNewIntent()会被调用;如果栈顶不存在该Activity,则与standard模式是一样的。
standard和singleTop都是在原任务栈中新建Activity实例,不会启动新的Task,即使指定了taskAffinity属性。
taskAffinity:标识了activity所在的任务栈的名字,如果不指定taskAffinity,名字默认为app的包名;具有相同taskAffinity的Activity属于同一个任务。
需要注意的是taskAffinity对 standard和singleTop没有任何影响。
3. singleTask
栈内复用模式:如果任务栈中存在这个activity,则复用该activity,不管activity是否位于栈顶;复用时,会将该activity上面的activity全部出栈;并回调该ativity的onNewIntent();
activity启动的时候,会在对应的任务栈中进行匹配,如果任务栈不存在,则创建任务栈;任务栈就是根据taskAffinity进行配置的。
4.singleInstance
全局唯一模式:该模式与singleTask的特点一样;唯一区别就是,会单独占用一个任务栈,具有全局唯一性,