您的位置:首页 > 其它

Activity的四种加载模式

2018-01-18 17:55 197 查看
正如前面介绍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.si
4000
ngleTask 模式
采用这种加载模式的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显示出来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: