一、Activity的四种启动模式
- standard(标准模式):系统默认的模式。每次启动一个Activity都会重新创建一个新的实例,不管这个实例是否已经存在。当我们用 Application Context去启动standard模式的Activity的时候会报错,是因为standard模式的Activity默认会进入启动它的Activity所属的任务栈中,但是由于非Activiy类型的Context(如Application Context)并没有所谓的任务栈,所以就会报错,解决这个问题的方法就是为待启动Activity指定FLAG_ACTIVITY_NEW_TASK标记位,这样启动的时候就会为他创建一个新的任务栈
- singleTop(栈顶复用模式):在这种模式下,如果新的Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,同时它的onNewIntent方法会被回调,通过这个方法的参数我们可以取出当前请求的信息
- singleTask(栈内复用模式):这是一种单实例模式,在这种模式下,只要Activity在一个栈中存在,那么多次启动该Activity都不会重新创建实例,和singleTop一样,系统会回调其onNewIntent。singleTask默认具有clearTop的效果
- singleInstance(单实例模式):具有此种模式的Activity只能单独地位于一个任务栈中
在上面说到Activity所需要的任务栈,那么什么是Activity所需要的任务栈呢?
TaskAffinity参数可以翻译为任务相关性,这个参数标识了一个Activity所需要的任务栈的名字,默认情况下所有Activity所需的任务栈的名字都是应用的包名。当然我们可以为每个Activity都单独指定TaskAffinity属性,这个属性值必须不能和包名相同,否则就相当于没有指定。
TaskAffinity属性黄祖耀和singleTask启动模式或