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 ViewPager & WP Pivot
  3. 官方NotePad实例学习--ListActivity的使用
  4. Android自定义View总结(一)基础知识与实例
  5. react-native开发实例之替换默认logo——android实现
  6. 实例教程四:采用Pull解析器解析和生成XML内容
  7. Android - Activity - 启动模式
  8. android如何设置全屏模式

随机推荐

  1. 自定义样式的来源与优先级及选择器与权重
  2. CSS选择器中优先级和权重区别
  3. CSS的样式来源与样式选择器
  4. VSCode中Emmet的快捷操作
  5. 用户注册页面、简单的后台页面
  6. CSS选择器种类
  7. CSS盒子模型
  8. CSS伪类,状态伪类和结构性伪类
  9. css伪类选择器
  10. css伪类与盒模型对比写法