Activity的4种加载模式

来源:互联网 发布:javascript 清空input 编辑:程序博客网 时间:2024/05/16 06:20

配置Activity时可指定android:launchMode属性

该属性用于配置该Activity的加载模式。

standard:标准模式

singleTop:Task顶单例模式

singleTask:Task内单例模式

singleInstance:全局单例模式

Android采用Task来管理多个Activity,当我们启动一个应用时,Android就会为其创建一个Task

然后启动这个应用的入口Activity

可以通过getTaskId()方法来获取它所在的Task的ID

事实上我们可以把Task理解成Activity栈,Task以栈的形式来管理Activity:先启动的Activity放在栈底,后启动的放在栈顶。

standard模式的TaskId总是相同,表明其加载模式不会使用全新的Task


singleTop模式

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

如果将要启动的Activity没有位于Task栈顶时,此时系统会重新创建目标Activity的实例,并将它加载到Task的栈顶。

singleTask模式

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

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

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

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

singleInstance模式

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

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

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

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

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



0 0
原创粉丝点击