您的位置:首页 > 移动开发 > Android开发

Android之四大组件之一-Activity(三)

2016-07-01 14:09 691 查看
Activity四种加载模式

**为什么要为Activity指定加载模式?

Android对Activity的管理,采用Task来管理多个Activity,当我们启动一个应用时,Android就会为之创建了一个Task,然后启动这个应用的入口Activity,Android的Task是一个有点麻烦的概念,因为Android并没有为Task提供API,因此开发者无法真正访问Task,只能调用Activity的

getTaskId()方法来获取它所在的Task的ID,事实上,我们可以把Task理解成Activity栈,Task以栈的样式来管理Activity,先启动的Activity被放在Task栈底,后启动的Activity被放在Task栈顶。

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

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

1)standard 默认
不管Activity实例是否存在,
都会创建一个新的实例装入Task。

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

例子:10个应用程序都要调用浏览器的应用,

      那么你需要创建10个浏览器对象的Activity的对象吗?

2)singleTop 栈顶单例  --->微薄刷新

  被跳转的Activity位于Task顶部时:
不会创建新的实例,直接复用已有的Activity实例

  被跳转的Activity不是位于顶部时:
创建一个新的实例,同standard模式相似

3)singleTask 栈内单例:在同一个Task内只有一个实例

    采用这种模式分三种情况:

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

        b)如果将要启动的目标Activity已经位于Task栈顶,此时同singleTop模式
a)如果将要启动的目标Activity没有位于Task栈顶,系统将会把位于该Activity上面的所有Activity移除Task栈,从而使得目标Activity转入栈顶。

4)singleInstance  全局单例模式

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

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

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

       需要指出:采用单例模式加载Activity总是位于Task栈顶,

       采用单例模式加载Activity所在Task只包含该Activity
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息