Activity启动模式

原创 2015年11月20日 20:54:06

据我们所知Activity有多种启动模式,各种启动模式启动所带来的行为是不同的,据官方文档所说,在manifest文件<activity>元素中可以设置如下几个属性:

taskAffinity

launchMode

而在Intent中,有如下几个FLAG是比较常用的:

FLAG_ACTIVITY_NEW_TASK

FLAG_ACTIVITY_CLEAR_TOP

FLAG_ACTIVITY_SINGLE_TOP

下面就来看一下这些属性和FLAG的设置会影响到Activity的什么行为

Activity的启动模式

有两种方法可以定义Activity启动模式,在manifest文件中定义和使用Intent的FLAG定义,这两种定义模式各有各的不同,但是在两者同时存在的时候以Intent中定义的启动模式为准。

manifest文件中定义:

当在manifest文件中定义Activity的时候,可以通过设置<activity>标签下的launchMode属性来设置当前Activity的启动模式,有如下几个可选项

1.standard(标准模式):

standard模式是系统默认的启动模式。每次启动一个Activity都会创建出一个新的实例,在一个任务栈中可以有多个Activity的实例。以这种模式启动的Activity将会在启动它的Activity所在的任务栈中,不可以用ApplicationContext去启动standard模式的Activity,不然会出现异常,因为ApplicationContext没有自己的任务栈。

2.singleTop:

栈顶复用模式。如果启动的Activity在当前任务栈的栈顶,那么不会重新启动,只会调用Activity的onNewIntent方法,但是如果启动的Activity不在当前任务栈的栈顶,将会创建新的实例,所以说以这种模式启动的Activity也会在同一个任务栈中存在多个实例。

3.singleTask:

当一个Activity以这种模式启动时,系统会寻找这个Activity的相关任务栈,如果这个任务栈存在,就会检查任务栈中是否有这个Activity的实例,如果有,就不会创建Activity,如果没有则会创建出这个Activity并入栈。如果这个Activity的相关任务栈不存在,则会创建出一个任务栈,并且将Activity放到新的任务栈中。

上面提到的相关任务栈是什么呢?以下是官方文档的一些介绍:

如果在Intent中加入了一个FLAG_ACTIVITY_NEW_TASK flag或者在manifest文件中配置的启动模式是singleTask的话,系统将检查当前任务栈的affinity和该Activity设置的affinity是否相同,如果相同则会把它放到当前的任务栈中,如果不同将会创建一个新的任务栈,默认情况下Activity的affinity为当前应用的包名。

有一点需要注意,如果创建的这个Activity的相关任务栈存在,并且在任务栈中存在这个Activity的实例的话将会把这个任务栈放到栈顶,那么在这个Activity实例之上的Activity都将执行出栈操作。

4.singleInstance:

这种模式和singleTask很像,基本上由singleTask的所有特点。但是不同的是以这种模式创建的Activity只能自己单独的处于一个任务栈中。

使用Intent的FLAG设置

1.FLAG_ACTIVITY_NEW_TASK:

和singleTask模式类似,启动的Activity都会位于自己的任务栈中。以这种模式启动Activity经常用来列出很多可以启动的选项来进行启动。

2.FLAG_ACTIVITY_SINGLE_TOP:

和singleInstance模式基本相同。

3.FLAG_ACTIVITY_CLEAR_TOP:

设置了这个FLAG的Activity在启动的时候如果在当前任务栈中已经存在实例,会将存在的实例之上的所有Activity全部出栈。


版权声明:本文为博主原创文章,未经博主允许不得转载。

[Android开发]Activity的四种启动模式及其应用场景

启动模式(launchMode)在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用...
  • CodeEmperor
  • CodeEmperor
  • 2016年01月08日 11:39
  • 15133

Activity四种启动模式详解

最近在学习《Android开发艺术探索》,所以对所学习到的知识做个总结,就算是做笔记吧。 Activity的启动模式目前有四种,分别是standard、singleTop、singleTask和si...
  • Mr_wzc
  • Mr_wzc
  • 2016年06月23日 20:16
  • 2670

彻底弄懂Activity四大启动模式

最近有几位朋友给我留言,让我谈一下对Activity启动模式的理解。我觉得对某个知识点的理解必须要动手操作才能印象深刻,所以今天写一篇博文,结合案例理解Activity启动模式。由于之前看过“区长”的...
  • mynameishuangshuai
  • mynameishuangshuai
  • 2016年05月24日 16:04
  • 58706

Android基础:最易懂的Activity启动模式详解

前言 Android基础中的Activity启动模式非常重要 本文将介绍对Activity启动模式进行全面介绍 目录1. 定义即Activity启动的方式2. 启动模式的类别Android启动提供了四...
  • carson_ho
  • carson_ho
  • 2017年01月22日 16:59
  • 3689

Android Activity 的四种启动模式

在实际开发中,应根据特定的需求为每个Activity制定恰当的启动模式。Activityde 的启动模式有四种。分别是standard、singleTop、singleTask和singleInsta...
  • YeeCeeYee
  • YeeCeeYee
  • 2017年03月22日 21:47
  • 297

Activity的四种启动模式的介绍及其应用场景

应用场景: 1.singleTop适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。聊天的对话窗口, 2.sing...
  • JustinNick
  • JustinNick
  • 2016年09月13日 22:30
  • 2522

Android Activity启动模式的设置

Android为了使我们能够打破默认的堆栈的先后出的模式,提供了两个种方式:一种是在AndroidManifest.xml定义Activity时指定它的加载模式,另一种是在用Intent开启一个Act...
  • u011361576
  • u011361576
  • 2013年11月02日 11:22
  • 2974

Android四大组件---Activity之启动模式及启动模式的应用场景

在“Android性能优化”中有这么一条规则:    复用、回收Activity对象: 临时的activity及时finish, 主界面Activity启动模式设置singleTask,一般界...
  • u012810020
  • u012810020
  • 2016年01月11日 20:39
  • 1404

关于代码实现activity的启动模式

在开发项目中我们可能会经常遇到,
  • u010897392
  • u010897392
  • 2014年08月07日 09:31
  • 1629

对于Android的Activity启动模式的一些总结和理解

安卓Activity的启动模式 1.1   两种启动方式 1.      在AndroidMainfest.xml中启动 例如: AndroidMainfest.xml.xml中设置Activity的...
  • u010335298
  • u010335298
  • 2016年10月13日 14:55
  • 1357
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Activity启动模式
举报原因:
原因补充:

(最多只允许输入30个字)