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

更多相关文章

  1. Android应用程序启动过程源代码分析
  2. Android(安卓)Launcher 分析
  3. Android基础(一)
  4. 进入android项目组的第一天
  5. Android声音管理方法
  6. Android震动---启动、循环、取消控制
  7. Android(安卓)9 (P)系统启动之SystemServer大揭秘下
  8. Linux kernel起来后Android启动过程
  9. 【Android】应用程序启动过程源码分析

随机推荐

  1. 深入讲解Android中Activity launchMode
  2. Android我还可以相信你多少系列文章五之
  3. php与android的简单交互
  4. Android技术博文汇总
  5. Drawable Resources Part I(Drawable 资源
  6. Android的Handler,Looper源码剖析
  7. React Native与Android原生之间的通讯
  8. 使用Eclipse搭建简易Android服务器
  9. Android菜鸟的成长笔记(2)——第一个Androi
  10. Android——View宽高的设置和多种获取宽