安卓activity(活动)启动模式详解

启动模式简介:

1、standard

      标准模式,也是默认模式,如果launchMode不设置的话,默认是此模式,每次启动都会创建一个实例,比如a-a-a-a,活动a启动活动a,按返回键的话是a-a-a-a,有4个a活动实例。

2、singleTop

     栈顶复用模式,如果启动的活动已经处于栈顶,则不会创建新的实例,而是复用栈顶活动,比如a-a-a-a,按返回键的话会直接退出app,因为当前虽然启动了4次a,但是只有一个实例。

3、singleTask

    栈内复用模式,简单来说,启动的时候,如果栈内已经有实例,则会将此实例以上的活动全部出栈,使此活动处于栈顶复用,比如a-b-c-a,按返回键的话,会直接退出app,因为c启动a时,栈底已经有a的实例,这时候bc会出栈,a会处于栈顶,点返回键的话,栈内只有a一个活动,当然会退出app。

4、singleInstance

    单实例模式,简单来说就是,整个app进程,只存在一个活动实例,跟以上不同的是,会启动一个新活动栈放此实例,如果启动时,已经存在此实例,则将此活动栈调度到前台复用此实例,比如a-b-c-d-a(abc都为标准模式,d为单实例模式),点返回键的话会怎么样呢?答案是a-c-b-a-d-结束,如果不熟悉的同学这里就迷茫了,不着急,下面会详细讲解。

启动模式栈演示:

1、standard:a-a-a-a

左边是启动,右边是返回,新的活动会产生新的实例并且加入到活动栈的栈顶。第二张图为demo   log验证

安卓activity(活动)启动模式详解_第1张图片安卓activity(活动)启动模式详解_第2张图片

2、singleTop:a-a-b-a

A启动A的时候,此时已经有A的实例在栈顶,因此复用且不产生新的实例,返回的结果是A-B-A

安卓activity(活动)启动模式详解_第3张图片

3、singleTask:A-B-C-D-A

A-B-C-D依次都是创建新的实例并且入栈,D-A时,栈底已经有A的实例,于是B-C-D三个实例出栈,复用栈底的A实例,返回时只有一个A活动返回。对应demo log如二图。

安卓activity(活动)启动模式详解_第4张图片安卓activity(活动)启动模式详解_第5张图片

4、singleInstance:A-B-C-D-A(A、B、C均为标准模式,D为singleInstance模式)

启动过程中,A-B-C都是正常启动,产生新的实例,入栈,C-D时,由于D为单实例模式,此时创建新的活动栈,将D的实例放入,D-A时,由于A为标准启动模式,于是返回普通活动栈创建A实例,此时返回是从当前活动所在栈开始出栈,一直到A-C-B-A全部出栈,此时才会将D所在栈出栈,因此全部返回流程为A-C-B-A-D-结束

安卓activity(活动)启动模式详解_第6张图片安卓activity(活动)启动模式详解_第7张图片

启动模式设置:

1、声明活动时设置android:launchMode

2、声明intent时设置:

Intent intent = new Intent (ActivityA.this,ActivityB.class);

intent,addFlags(Intent,标记位属性);

startActivity(intent);

注意addflag优先级>AndroidMainifest设置

建议大家自己写个demo跑一下,会非常清楚,方便大家掌握

有偷懒的同学也可以直接clone下git demo,简单4个活动互相跳转,传送门https://github.com/zhangyuyan62435/launchMode.git

码字不易,转载请注明出处。

你可能感兴趣的:(android启动模式,安卓启动模式,活动启动模式,activity启动模式,android)