Activity加载模式

来源:互联网 发布:后窗知乎 编辑:程序博客网 时间:2024/04/25 16:22

配置Activity时可指定Android:launchMode属性,该属性用于配置该Activity的加载模式,该属性支持4个属性值:

a) standard

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

b) singleTop

当将要启动的Activity已经位于Task栈顶时,系统不会重新创建目标Activity实例,而是直接复用已有的Activity实例。其他与standard模式基本相似

c) singleTask

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

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

ii. 如果将要启动的Activity已经位于Task栈顶,此时与singleTop模式的行为相同

iii. 如果将要启动的Activity已经存在但是没有位于Task栈顶,系统将会把位于该Activity上面的所有Activity移除Task栈,从而使得目标Activity转入栈顶

d) singleInstance

这种加载模式下,系统保证无论从哪个Task中启动目标Activity,只会创建一个目标Activity实例,并会使用一个全新的Task栈来装载该Activity实例。当系统采用singleInstance模式启动目标Activity时,可以分为下面两种情况:

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

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

注意:采用singleInstance模式加载Activity总是位于Task栈顶,采用singleInstance模式加载Activity所在Task只包含该Activity

 

为什么要指定加载模式?加载模式的作用?

在回答这个问题前,先介绍Android对Activity的管理:Android采用Task来管理多个Activity,当我们启动一个应用时,Android就会为之创建一个Task,然后启动这个应用入口Activity。Android并没有为Task提供API,只能调用Activity的getTaskId()方法来获取它所在的Task的ID。其实我们可以把Task理解成Activity栈,Task以栈的形式来管理Activity:先启动的Activity被放在Task栈底,后启动的Activity被放在Task栈顶

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

1 0