189 8069 5689

Activity的LaunchMode-创新互联

什么是Task

平桂网站建设公司创新互联,平桂网站设计制作,有大型网站制作公司丰富经验。已为平桂成百上千家提供企业网站建设服务。企业网站搭建\成都外贸网站建设公司要多少钱,请找那个售后服务好的平桂做网站的公司定做!

先讲一下android中的Task。可以把它看做是一个栈,用在存放Activity的栈,只有两个动作,进栈和出栈,遵循先进后出的原则。

Activity的LaunchMode

一、Activity的启动模式有四种:

1. Standard

2. singleTop

3. singleTask

4. singleInstance

问:哪里设置Activity的启动模式呢?

答:在Menifest.xml中设置Activity的属性android:launchMode="singleTop"

问:这些启动模式的设置决定了什么?或者作用是什么?

答:决定了他们在Task中的存在方式

二、四种模式的解释

1. standard

 默认的模式,每次都会新建,每个Task都可以有,且每个Task都可以有多个实例(每个Task都可以有,且可以有多个)  

2. singleTop

 当前实例如果在栈顶,就不新建实例,调用其OnNewIntent。 如不在栈顶,则新建实例  (每个Task都可以有,且可以有多个,在栈顶时可复用)  

3. singleTask

 新建一个Task,如果已经有其他的Task并且包含该实例,那就直接调用那个Task的实例。(只有一个Task中会有)  

4. singleInstance

新建一个Task,且在该Task中只有它的唯一一个实例。 (只有一个Task会有,且该Task中只有它)  

三、演示

Activity的LaunchMode

实例一、

如上图,创建三个Activity,每个Activity中都有一个Button,单击后会跳到下一个Activity

默认是standard模式,这时候看一下Task中的情况

Activity的LaunchMode

Activity的LaunchMode

会看到在Task A中有两个Activity A,所以standard是每次都在初始化一个新的Activity

实例二、

 为了证明singleTop模式,我们将Activity之间的跳转方式改变一下,如下图

先用一个Activity证明吧,这是一个Activity,点击按钮后跳到他本身。例子本身没有什么实际作用,只是为证明singleTop

Activity的LaunchMode

如果是模式standard模式,大家想一下,栈的情况会是怎样的?

Task栈中情况如下

Activity的LaunchMode

但如果是singleTop中,不管你按多少次button,栈中的情况只有一种,singleTop会判断当前这个Activity是不是在Task的顶部,如果是在顶部就不会去new,如果不是,就会new

Activity的LaunchMode

如果把实例一中的每个ActivitylaunchMode都设置成singleTop,那么Task中的情况回合是实例一栈的情况是一模一样的。

实例三、

关于singTasksingleTask模式和后面的singleInstance模式都是只创建一个实例的。

如果Activity A设置了singleTask,那个么栈中只有Activity A的一个实例,但是可以包含Actvity B ,Activty C 的实例,这与singleInstance是有区别的,singleInstance是一个栈中只有这一个Activity 的实例,只有一个。

将实例一中的Activity A 设置为singleTask模式,如下图

Activity的LaunchMode

则栈中的关系如下

Activity的LaunchMode

我们看到在4步的时候发生了变化,栈中就只有Activity A了,此时如果按Back键时,就退出了程序。

Activity CActivity A进行跳转时,Task中到发生了什么?

因为Activity A的家在模式为singTask会先判断Task A中是否有Activity A 的实例,如果有,就不用实例化了,如果没有就要实例化。结果在Task  A中有Activity的实例,但是在栈底,这时候怎么办呢,会先将Activity C弹出栈,然后在弹出 Activity B弹出栈。如下图

Activity的LaunchMode

实例四、

Activity的LaunchMode

Activity A launchModesingInstance,会创建一个新的Task,然后在Task中只有一个实例就是Activity A.

栈中情况如下

Activity的LaunchMode

这种模式下,要注意Activity的回退情况,就是按Back键的时候Activity的回退情况。此时如果按Back键,先返回到Activity A,然后是B

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


标题名称:Activity的LaunchMode-创新互联
本文来源:http://cdxtjz.cn/article/dsscep.html

其他资讯