Android笔记之四种launchMode

一、先来了解Task

Task
顾名思义,任务,每一个Android应用在运行的时候,都会创建和维护一个属于自己的任务,而事实上,Task是一个包含栈结构的容器,该栈通常叫回退栈,用来保存当前所有Android应用中已经创建的窗口对象,通常我们看到的界面就是处于回退栈栈顶的窗口对象。当我们打开新的一个界面,那么之前的界面(窗口对象)就会压入栈内,让出栈顶位置给新来的界面(窗口对象);当关闭该窗口对象时,系统会首先将该对象弹出栈,并销毁该对象。当栈里最后一个窗口对象被弹出栈后,回退栈为空,这时候回退栈被销毁,应用停止。(应该注意到,这时候,应用并没有完全退出内存,它的部分资源如静态变量还会在内存中停留很长时间。)

此外有一点需要注意的是,每一个应用都有一个独一无二的task,当打开新的一个应用时,它的task出现在前台,显示给用户,而旧的task将会转入后台,这时候系统会自动保存旧task窗口对象的状态,等该task被重新切换到前台运行后,该窗口回复焦点的同时也会恢复所有的状态,然而。必须指出一点,不要以为处于后台的task会一直停留在内存里,等待你回来。当手机内存被耗尽,或者新打开一个APP需要大量内存的时候,你所以为会等你的旧task将会无情地被系统干掉,哪个task被停止的时间越久越先被销毁。

二、四种启动模式launchMode

Activity有四种加载模式:

  • standard
  • singleTop
  • singleTask
  • singleInstance

设置的位置在AndroidManifest.xml文件中activity元素的android:launchMode属性:


模式


具体描述


standard


launchMode的默认值,在新建Activity时默认不写,就已经是该模式,每调用一个startActivity,系统就会新实例化一个窗口对象,回退栈里就多一个该实例的窗口对象。除非是按back键或者在代码里调用finish()方法,否则一直存在直到应用停止。不管有没有已存在的实例,都生成新的实例。


singleTop


如果窗口的实例刚好是在当前界面(即回退栈的栈顶),那么系统将不再创建新的窗口对象(standard模式则不同,不管是不是栈顶都会新建),直接使用该窗口实例。这样做的好处就是只要需要用的实例一直在界面上,回退栈里就只有一个实例,要退出时按下一次就能直接退出(因为只有一个窗口对象),这个模式在NFC中使用特别合适。

如果发现有对应的Activity实例正位于栈顶,则重复利用,不再生成新的实例。但是,注意一点,它只看栈顶,不看栈里,如果栈顶没有该实例,栈里也有,它也依然会新建一个窗口对象的实例。


singleTask


这个模式比较强权和霸道,即如果发现有对应的Activity实例,则使此Activity实例之上的其他Activity实例统统出栈,使此Activity实例成为栈顶对象,显示在当前界面,而不会新建该实例。如果该窗口实例不存在则会新建,并置于栈顶。


singleInstance


该模式更加独断专行,如果当前回退栈中有,则将它之前的实例对象全部清除出去,然后自己置于栈顶,如果当前回退栈没有,它会新建一个回退栈,然后新建一个实例对象,并且不允许其他实例对象进来。该模式很少用,因为新建一个只用于一个实例对象的回退栈太费内存空间。且意义不大。

上述文字比较枯燥,并且没有具体的例子。没写例子的原因是因为有前辈已经写了很详细的分析实例了。如果你还不太懂,请看这篇博文。http://blog.csdn.net/liuhe688/article/details/6754323

此外,上传一个专门用来讲述四种模式不同的例程。是《Android开发权威指南》里的一个例子,大家可以运行看看是不是这样。

例程下载

Android笔记之四种launchMode,布布扣,bubuko.com

时间: 2024-12-10 11:48:47

Android笔记之四种launchMode的相关文章

Android笔记--两种双击退出程序的方法

首先通过onKeyDown获取当前是否是BACK键.如果是进行下一步. 两种方法其中一种是通过对连续点击back键之间的时间进行判断是否是要退出,另一种是设置一个状态值,通过改变状态值来判断是否是要退出. 1. 1 private long exitTime=0;//根据连续点击之间时间判断 是否退出 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanc

Android的taskAffinity对四种launchMode的影响

在Android系统中,一个application的所有Activity默认有一个相同的affinity(亲密关系,相似之处).也就是说同一个应用程序的的所有Activity倾向于属于同一个task.但是我们并不能说Android里一个应用程序只有一个任务栈.笔者今天针对当taskAffinity不同时,四种launchMode下在打开一个新的Activity时是否会建立一个新的任务栈做了实验. 基本的代码如下: AndroidManifest.xml: MainActivity的代码 pack

Android 四种LaunchMode

Activity的四种launchMode. launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用一个task里.这里简单介绍一下task的概念,task是一个具有栈结构的对象,一个task可以管理多个Activity,启动一个应用,也就创建一个与之对应的task. Activity一共有以下四种launchMode: 1.standard 2.singleTo

详解Android开发中Activity的四种launchMode

Activity栈主要用于管理Activity的切换.当使用Intent跳转至某个目标Activity,需要根据目标Activity的加载模式来加载. Activity一共有以下四种launchMode: 1.standard:默认,每次使用Intent跳转到目标Activity时都创建一个新的实例.坏处是每次进入都要创建新的实例,执行OnCreate方法. 2.singleTop:如果要跳转的目标Activity正好在task的顶部(说明当前肯定不在目标task里,例如我在微信首页,然后想使用

MyBatis association的两种形式——MyBatis学习笔记之四

一.嵌套的resultMap 这 种方法本质上就是上篇博文介绍的方法,只是把教师实体映射从association元素中提取出来,用一个resultMap元素表示.然后 association元素再引用这个resultMap元素.修改上篇博文示例的StudentMapper.xml如下: <?xml version="1.0" encoding="utf8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org

48. 蛤蟆的数据结构笔记之四十八的有向无环图的应用关键路径

48. 蛤蟆的数据结构笔记之四十八的有向无环图的应用关键路径 本篇名言:"富贵不淫贫贱乐 ,男儿到此是豪雄.-- 程颢" 这次来看下有向无环图的另一个应用关键路径. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47135061 1.  关键路径 与AOV-网相对应的是AOE-网(Activity On Edge)即边表示活动的网.AOE-网是一个带权的有向无环图,其中,顶点表示事件(Event),弧表示活动,权表

46. 蛤蟆的数据结构笔记之四十六普里姆算法

46. 蛤蟆的数据结构笔记之四十六普里姆算法 本篇名言:"手莫伸 ,伸手必被捉.党与人民在监督 ,万目睽睽难逃脱.汝言惧捉手不伸 ,他道不伸能自觉 , 其实想伸不敢伸 ,人民咫尺手自缩.-- 陈毅" 连通图的生成树是一个极小的连通子图,它含有图中全部的顶点,但只有足以构成一棵树的n-1条边.所谓的最小成本,就是n个顶点,用n-1条边把一个连通图连接起来,并且使得权值的和最小.构造连通网的最小代价生成树,即最小生成树(Minimum Cost Spanning Tree). 找连通图的最

44. 蛤蟆的数据结构笔记之四十四弗洛伊德Floyd算法

44. 蛤蟆的数据结构笔记之四十四弗洛伊德Floyd算法 本篇名言:"希望是厄运的忠实的姐妹. --普希金" 我们继续来看下数据结构图中的一个算法,这个算法来自图灵奖得主. 1.  Floyd算法介绍 Floyd算法又称为插点法,是一种用于寻找给定的加权图中多源点之间最短路径的算法.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名.注意这个可不是心理学的那个弗洛伊德. 是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径

41 蛤蟆的数据结构笔记之四十一图的遍历之深度优先

41  蛤蟆的数据结构笔记之四十一图的遍历之深度优先 本篇名言:"对于我来说 , 生命的意义在于设身处地替人着想 , 忧他人之忧 , 乐他人之乐. -- 爱因斯坦" 上篇我们实现了图的邻接多重表表示图,以及深度遍历和广度遍历的代码,这次我们先来看下图的深度遍历. 欢迎转载,转载请标明出处: 1.  原理 图遍历又称图的遍历,属于数据结构中的内容.指的是从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次.图的遍历操作和树的遍历操作功能相似.图的遍历是图的一种基本操作,图的许多其它