先声明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
这个大家自己先想哈,我就不一一讲诉了