Activity LaunchMode堆栈解析

Activity 四种launchMode分别是standard(系统默认)、singleTop、singleTask、singleInstance。下面分是否创建activity和所在栈情况进行讲解:

规则:当创建一个activity时,如果所需的栈不存在,则创建所需的栈,再将创建好的activity放入栈中

定义:所需栈指的是activity将要放入的栈,默认情况即不指定栈名称的情况下,是栈的名称是应用的包名;如果指定了栈名(通过taskAffinity属性来指定),则栈名就是所指定的栈名


是否创建新activity:

standard:系统默认,每次打开此模式的activity,不论此activity是否已经创建,都会创建新的activity

singleTop:如果打开activity位于所需栈的栈顶,则不创建新的activity,否则会创建新的activity

singleTask:如果打开的activity位于所需栈的栈内,则不创建新activity;否则先创建所需栈,再创建新的actiivty放入刚创建的栈中

singleInstance:具有singleTask的特性,同时它所在的栈只有它一个activity,意思就是说在一个进程中只能有一个此模式的activity且它独占一个栈



栈情况:

standard和singleTop的栈规则是一样的:哪个栈调用activity,activity就放入哪个栈中。特别指出的是:

1、从桌面应用,如果应用的第一个显示页面是此模式,会创建新的栈,栈名为所需栈的栈名,并把此activity放入新栈中。这是因为第一次打开应用,进程中还没有所需的栈

2、singleInstance模式的activity打开此模式的activity时,会创建新的栈,栈名为所需栈的栈名,并把此activity放入新栈中。这是因为singleInstance的activity独占一个栈,所以需要创建新的栈来存放


singleTask:如果所需栈名和此模式的activity已经存在,则不创建新栈也不创建新activity,而是clear掉位于它上面的activity;否则会创建所需的栈并将创建出此模式的activity放入新栈中


singleInstance:如果进程中已经存在此模式的activity则创建栈;否则会创建所需的栈并将创建出此模式的activity放入新栈中





你可能感兴趣的:(android)