通常情况下,一个应用有一个Task,这个Task就是为了完成某个工作的一系列Activity的集合。而这些Activity又被组织成了堆栈的形式。当一个Activity启动时,就会把它压入该Task的堆栈,而当用户在该Activity中按返回键,或者代码中finish掉时,就会将它从该Task的堆栈中弹出。然而,事实上我们的需求远没有我们想的那么简单。有时候,你可能希望在开启一个Activity时,重新开启一个Task;有时你可能希望将已经存在的一个Activity放到栈顶,而不是重新创建一个等等。

标识Activity任务栈名称的属性:TaskAffinity,默认为应用包名。

Android为了使我们能够打破默认的堆栈的先后出的模式,提供了两个种方式:一种是在AndroidManifest.xml定义Activity时指定它的加载模式,另一种是在用Intent开启一个Activity时,在Intent中加入标志。如果两种方式都用了,则后者的优先级更高。两种方式的差别在于,前者在于描述自己,向别的Acttivity等声明你们如何来加载我;而后者则是动态的,指出我要求你(要启动的Activity)如何来加载。

Android为我们定义了四种启动模式,分别是:standard、singleTop、singleTask和singleInstance。

1.standard加载模式下,当一个Task请求加载一个Activity时,该Task直接实例化这个Activity,并把它放到栈顶,不管之前栈中是否存在该Activity的实例。

 

2.singleTop加载模式时,当一个Task请求加载一个Activity时,如果该Task对应的栈的栈顶就是一个Activity的实例,那么,它便不会重新创建,而是调用onNewIntent。如果该Task对应的栈中Activity的实例存在,但不是在顶部,那么该Activity依然要重新创建。简单的说就是获得焦点的Activity(当前的Activity)不能再激活一个自己的实例呗。singleTop模式下的Activity可以被实例化多次,但是不可以多个相同的Activity的实例重叠。

 

3.singleTask加载模式时,当一个Task请求加载一个Activity时,如果该Task对应的栈中有一个Activity的实例,那么它便不会重新创建。如果已经实例化,会将Task中其上的Activity实例销毁后,调用onNewIntent。一句话,singleTask模式下的Activity,在自己的Task里只有一个实例,并且启动时不允许其他Activity凌驾于自己之上

 

4.在singleInstance这个模式下,当一个Task请求加载一个Activity时,如果所有Task的栈中有一个Activity的实例,那么,它便不会重新创建。如果所有Task的栈中没有一个Activity的实例,那么该Activity的实例被创建,并独占一个新的task,其它activity不能存在这个task里。

实例:

现在ATask的栈元素为A-B-C-D(D在栈顶),

这时候给D发起intent(D,D),

如果D是 “standard”的,则生成D的一个新实例,栈变为A-B-C-D-D;

如果D是singleTop的话,则不会生产D的新实例,栈状态仍为A-B-C-D;

如果这时候D发起intent(D,B)的话,不管B的launchmode是”standard” 还是 “singleTop” ,都会生成B的新实例,栈状态变为A-B-C-D-B;

如果B的launchmode是” singleTask”,栈状态变为A-B;

如果这时候D发起intent(D,E),E的launchmode是” singleInstance”,如果所有栈中不存在E,那么会产生一个新的Task栈,放入E,ATask的栈状态仍为A-B-C-D

知识总结: Activity的四种启动模式的更多相关文章

  1. Activity的四种启动模式

    Activity有四种启动模式: 1. standard,默认的启动模式,只要激活Activity,就会创建一个新的实例,并放入任务栈中,这样任务栈中可能同时有一个Activity的多个实例. 2. ...

  2. Activity的四种启动模式-图文并茂

    1.对于使用standard 模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例.   例如A启动A,A再接着启动A,A继续启动A,然后再分别出栈,如图所示 ...

  3. Activity的四种启动模式和onNewIntent()

    转自:http://blog.csdn.net/linghu_java/article/details/17266603 Android中Activity启动模式详解   在Android中每个界面都 ...

  4. 详解Activity的四种启动模式

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. Ac ...

  5. Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式。

    原文:Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式. Android Activity 的四种启动模 ...

  6. Activity的四种启动模式任务栈图解

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 今天带来另一篇Activity的文章--Activity的四种启动模式.该篇文章,会以图文讲解的方式带你彻底掌握Activity的启动 ...

  7. 安卓基础之Activity的四种启动模式

    Activity的四种启动模式   Activity的启动模式在清单文件中配置: <activity ... activity:lauchMode:"..."; //有四种模 ...

  8. Android 关于Activity的四种启动模式的简单介绍

    Activity启动模式设置: <activity android:name=".MainActivity" android:launchMode="standar ...

  9. Android学习笔记四:activity的四种启动模式

    Activity有四种启动模式:standard,singleTop,singleTask,singleInstance. 1.standard:标准启动模式 默认模式,这个模式下启动的Activit ...

随机推荐

  1. Java parseInt_使用此方法得到的原始数据类型的一个特定的字符串

    Java parseInt解释加方法示例     使用此方法得到的原始数据类型的一个特定的字符串. parseXxx()是一个静态方法,可以有一个参数或两个         java parseInt ...

  2. jquery load

    $('#loadFooter').click(function() { $('#footer').load('footer.html'); });

  3. 解决div布局中第一个div的margin-top在浏览器中显示无效果问题。

    原味来源:http://www.hicss.net/do-not-tell-me-you-understand-margin/ 垂直外边距合并问题 别被上面这个名词给吓倒了,简单地说,外边距合并指的是 ...

  4. 移动前端开发之viewport的深入理解(转载)

    本文为转载文章,原文网址:http://www.cnblogs.com/2050/p/3877280.html 在移动设备上进行网页的重构或开发,首先得搞明白的就是移动设备上的viewport了,只有 ...

  5. java异常处理练习

    异常的练习: 老师用电脑上课. 开始思考上课中出现的问题. 比如问题是    电脑蓝屏.    电脑冒烟. 要对问题进行描述,封装成对象. 可是当冒烟发生后,出现讲课进度无法继续. 出现了讲师的问题: ...

  6. 安装ipython notebook

    从http://cs231n.github.io/assignments2016/assignment1/开始说起,因为要学习cs231n课程,需要安装ipython notebook,原本电脑中安装 ...

  7. OpenJudge/Poj 1753 Flip Game

    1.链接地址: http://bailian.openjudge.cn/practice/1753/ http://poj.org/problem?id=1753 2.题目: 总时间限制: 1000m ...

  8. Android-ViewPagerIndicator-master 、Android-PullToRefresh 学习篇

    最近在学习android,然后看到了很多有用的开源库.其中一个就是Android-ViewPagerIndicator :. 这是与ViewPager兼容的一个分页指示器库.分页指示器(Friends ...

  9. xps文档打印后winform界面文字丢失

    最近做的xps文档打印功能,绝对的一波三折,一开始开发的时候,始终用的是xps writer 虚拟打印机,测试的时候也是,一直没有发现问题,但是真正到用户使用的时候,接上正式打印机,打印时候没有问题, ...

  10. CSS3 关于@font-face引用中文字体解决办法

    有两种方法,一种简单的,一种比较复杂,都可以实现(注:这里的方法只适合使用少量的中文字体,如果使用的字量过大,请使用其他方法解决) 第一种:简单的 1.下载需要的中文字体的.ttf格式,这个都不难找到 ...