activity 四种启动模式详解

先声明Activity有哪四种启动模式:

standard
singleTop
singleTask
singleInstance

这四种模式对于intent中的flag四种模式

standard对应Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT

singleTop对应Intent.FLAG_ACTIVITY_SINGLE_TOP

singleTask对应Intent.FLAG_ACTIVITY_CLEAR_TOP

singleInstance对应Intent.FLAG_ACTIVITY_NEW_TASK

现在详细分析这四种模式的区别和使用方法:

首先说下这四种模式的具体区别是什么?

对应四种不同的栈的存储方式

standard模式:

standard的模式是系统默认的模式

第一种情况 同一个应用

这种模式对应一个栈,对应这个栈的操作方法是只管添加不管重复,即每次启动多会将这个activity放到栈顶重新跳转

举个例子,加入我的跳转模式是a->b->c->d->a,对应栈的情况是a->ab->abc->abcd->abcda

第二种情况,不同应用

对应多个栈,不同应用对应不同栈,即有多少应用对应多少栈

举个例子 同样是a->b->c->d->a,加入ad在一个应用,cd在另一个应用 这两个应用对应的栈分别是 A,B

A的情况是a->ab->aba

B的情况是c->cd

singleTop模式:

和standard一样分两种情况,下面我全都只讲第一种情况

这种模式对应一个栈,对应栈的操作方式是在给栈添加元素时先检查是否存在对应的activity,如果存在就把他拿到栈顶,不存在就添加

举个例子 同样是 a->b->c->d->a,对应栈的情况是a->ab->abc->abcd->bcda(这种方式使用比较多)

singleTask模式

这种模式对应一个栈 对应栈的操作同样是在添加的时候先检查,加入说存在就把排在前面的移除在启动,不存在就添加

举个例子 同样是a->b->c->d->a,对应栈的情况是a->ab->abc->abcd->a

singleInstance模式:

这种模式对应多个栈,对应栈的操作是每次启动activity先创建一个栈,然后把activity放入栈中

举个例子 同样是a->b->c->d->a,对应栈的情况是分别创建了5个栈每个栈中放入对应activity(不常用)

下面实战一下

现在我启动activity的情况是这样的a—>b->c->d->a->d->c->b(同一个应用中)

第一种目的,要求按返回键回到a如何操作呢

我们先分析下,如果按返回键回到b哪在栈中情况是ab连着在同一个栈(b栈中只有一个元素,下个栈中a在栈顶),也就是说只要我满足栈顶是b,b下面是a就ok了,栈的情况就由大家自己去设计了

第二种目的,要求按返回键回到a在按返回键回到b如何操作呢

对应这种情况对栈的要求是bab连着在同一个栈中(同上),也就是说b在栈顶,下面是a,a下面还是b,栈的情况还是大家自己设计

第三个目的是按返回键到d在按返回键到c在按返回键到c

这个大家自己先想哈,我就不一一讲诉了





你可能感兴趣的:(android)