Activity的四种加载模式

正如前面介绍Activity配置时提到的,配置Activity时可指定android:launchMode属性,该属性用于配置该Activity的加载模式。该属性支持如下·4个属性值。

>standard:标准模式,这是默认的加载模式。

>singleTop:Task栈顶单例模式。

>singleTask: Task内单例模式。

>singleInstance:全局单例模式。

Android采用Task来管理多个Activity,当我们启动一个应用时,Android会为之创建一个Task,然后启动这个应用的入口Activity(即<intent-filter.../>中配置为MAIN和LAUNCHER的Activity).

Android的Task是个有点麻烦的概念——因为Android并没有为Task提供API,因此开发者无法真正去访问TASK,只能调用Activity的getTaskId()方法来获取它所在的Task的ID。事实上我们可以把Task理解成Activity栈,Task以栈的·1形式来管理Activity:先启动的Activity被放在Task栈底,后启动的Activity被放在栈顶。

那么Activity的加载模式,就负责管理实例化,加载Activity的方式,并可以控制Activity与Task之间的加载关系。

下面详细介绍这四种加载模式。

1. standard 模式

每次通过这种模式启动目标Activity时,Android总会为目标Activity创建一个新的实例,并将该Activity添加到当前Task栈中——这种模式不会启动新的Task,新Actiivty将被添加到原有的Task中。

当用户单击手机的“返回”键时,系统将会逐一从Activity栈顶删除Activity实例。

2.singleTop

这种模式与starndard模式基本相似,但有一点不同:当将要启动的目标Activity已经位于Task栈顶时,系统不会重新创建目标Activity的实例,而是直接复用已有的Activity实例。

如果将上面的MainActivity的加载模式改为singleTop,那么无论用户单机多少次按钮,界面上的程序都不会有任何变化。

  如果将要启动的目标Activity没有位于Task栈顶,此时系统会重新创建目标Activity的实例,并将它加载到Task栈顶——此时与stardard模式完全相同。

3.singleTask 模式

采用这种加载模式的Activity在同一个Task内只有一个实例,当系统采用singleTask模式启动目标Activity时,可分为如下三种情况。

>如果将要启动的目标Activity不存在,系统将会创建目标Activity的实例,并将它加载入Task栈顶。

  >如果将要启动的目标Activity已经位于Task栈顶,此时与singeTop模式的行为相同

>如果将要启动的目标哦Activity意境存在,但没位于Task栈顶,系统将会把位于该Activity上面所有Activity移出Task栈,从而使得目标Activity转入栈顶。

4. singleInstance模式

在这种加载模式下,系统保证无论从那个Task中启动目标Activity,只会创建一个目标Activity实例,并会使用一个全新的Task栈来加载该Activity实例。

当系统采用singleInstance模式启动目标Activity时,可分为如下两种情况。

>如果将要启动的目标Activity不存在,系统会先创建一个全新的Task,在创建一个目标Activity的实例,并将它将入到新的Task栈顶。

>如果将要启动的目标Activity已经存在,无论它位于那个应用程序中,位于那个Task中系统都会把该Activity所在deTask转到前台,从而使该Activity显示出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值