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全部出栈。


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

Activity启动模式

  • 2016年08月26日 14:56
  • 12.62MB
  • 下载

Activity生命周期与启动模式

  • 2017年08月08日 14:11
  • 26.15MB
  • 下载

Android面试题(一)——Activity的生命周期和启动模式

Android面试题(一)——Activity的生命周期和启动模式引言 这份面试题系列文章旨在查漏补缺,通过常见的面试题发现自己在Android基础知识上的遗漏和欠缺,验证所学是否扎实。 这是系列的第...

activity启动模式测试

  • 2016年05月12日 21:10
  • 6.79MB
  • 下载

Activity四种启动模式

  • 2016年07月21日 09:41
  • 30.55MB
  • 下载

Android启动模式以及如何通过adb指令查看app当前运行的activity

Activity的启动模式是我们实际开发以及面试中经常会用到的知识点,对Activity的四种启动模式我们应该有一个比较清楚的理解。先声明,这里的阐述比较适合初学者,如果有更深入的理解,欢迎大家批评指...

android的Activity启动模式

  • 2016年03月16日 17:59
  • 516KB
  • 下载

Activity启动模式

  • 2016年07月23日 17:51
  • 6.57MB
  • 下载

# Android中Activity四种启动模式和taskAffinity属性详解 #(4)

## 四 实例验证singleInstance的行为 ## 根据上面的讲解,并且参考谷歌官方文档,singleInstance的特点可以归结为以下三条: 1. 以singleInstance模...
  • Blumamy
  • Blumamy
  • 2015年02月06日 11:28
  • 254

Activity启动模式实例

  • 2015年04月12日 21:30
  • 2.08MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Activity启动模式
举报原因:
原因补充:

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