文档章节

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

Blumamy
 Blumamy
发布于 2015/02/10 14:39
字数 972
阅读 17
收藏 0

# AndroidActivity四种启动模式和taskAffinity属性详解 #(2)原创分享----------影子侠开发者社区Rong

## Activity四种启动模式详解 ##

 

activity有四种启动模式,分别为standardsingleTopsingleTasksingleInstance。如果要使用这四种启动模式,必须在manifest文件中<activity>标签中的launchMode属性中配置,如:

 

            <activity android:name=".app.InterstitialMessageActivity"

                  android:label="@string/interstitial_label"

                  android:theme="@style/Theme.Dialog"

                  android:launchMode="singleTask"

                 </activity>

 

同样,在Intent类中定义了很多与Activity启动或调度有关的标志,<activity>标签中有一些属性,这些标志,属性和四种启动模式联合使用,会在很大程度上改变activity的行为,进而会改变taskback stask的状态。关于Intent中的标志和<activity>标签中有一些属性会在本文后面介绍,在这一节中,先介绍activity的四种启动模式。

 

**standard**

 

标准启动模式,也是activity的默认启动模式。在这种模式下启动的activity可以被多次实例化,即在同一个任务中可以存在多个activity的实例,每个实例都会处理一个Intent对象。如果Activity A的启动模式为standard,并且A已经启动,在A中再次启动Activity A,即调用startActivitynew IntentthisA.class)),会在A的上面再次启动一个A的实例,即当前的桟中的状态为A-->A

 

**singleTop**

 

如果一个以singleTop模式启动的activity的实例已经存在于任务桟的桟顶,那么再启动这个Activity时,不会创建新的实例,而是重用位于栈顶的那个实例,并且会调用该实例的onNewIntent()方法将Intent对象传递到这个实例中。举例来说,如果A的启动模式为singleTop,并且A的一个实例已经存在于栈顶中,那么再调用startActivitynew IntentthisA.class))启动A时,不会再次创建A的实例,而是重用原来的实例,并且调用原来实例的onNewIntent()方法。这是任务桟中还是这有一个A的实例。

如果以singleTop模式启动的activity的一个实例已经存在与任务桟中,但是不在桟顶,那么它的行为和standard模式相同,也会创建多个实例。

 

**singleTask**

 

谷歌的官方文档上称,如果一个activity的启动模式为singleTask,那么系统总会在一个新任务的最底部(root)启动这个activity,并且被这个activity启动的其他activity会和该activity同时存在于这个新任务中。如果系统中已经存在这样的一个activity则会重用这个实例,并且调用他的onNewIntent()方法。即,这样的一个activity在系统中只会存在一个实例。

 

其实官方文档中的这种说法并不准确,启动模式为singleTaskactivity并不会总是开启一个新的任务。详情请参考 解开Android应用程序组件Activity"singleTask"之谜,在本文后面也会通过示例来进行验证。

 

**singleInstance**

 

总是在新的任务中开启,并且这个新的任务中有且只有这一个实例,也就是说被该实例启动的其他activity会自动运行于另一个任务中。当再次启动该activity的实例时,会重用已存在的任务和实例。并且会调用这个实例的onNewIntent()方法,将Intent实例传递到该实例中。和singleTask相同,同一时刻在系统中只会存在一个这样的Activity实例。

 

此文章系原创,如需转载,请注明出处影子侠开发者社区www.yingzixia.com

 


© 著作权归作者所有

Blumamy
粉丝 2
博文 11
码字总数 13692
作品 0
海淀
私信 提问
Android xml application属性详解

例子: <application android:allowClearUserData=["true" | "false"] android:allowTaskReparenting=["true" | "false"] android:backupAgent="string" android:debuggable=["true" | "fals......

恰同学少年
2015/07/28
306
0
再说Activity的四种启动模式

Android启动模式分为四种,分别为:standard、singleTop、singleTask、singleInstance stander 标准启动模式: 这是Activity默认的启动模式,也是逻辑最简单的一种,只要Activity使用这种模式...

TedYin
2014/02/23
126
0
android当中taskAffinity属性与launchMode相关

一、本文尝试解释以下问题 1. Activity被启动之后放在哪个任务栈当中?与哪些因素有关? 2. Activity的四种启动模式对Activity的启动有哪些影响? 3. 在Activity中使用startActivityForResul...

wapcdwiki
2014/07/11
1K
0
android Activity启动模式

Activity的启动模式有两种:一种是在AndroidManifest.xml文件中,配置launchMode属性,还有一种是设置intent的flag的方式来启动 1、设置android:launchMode属性 可以分为四种:standard、sin...

西米小娅
2018/09/18
40
0
喜闻乐见-Android LaunchMode

launchMode,通俗点说,就是定义了Activity应该如何被launch的。那么这几种模式的区别以及应用场景,会有何不同呢?谷歌是基于什么原因设计这几种模式的呢?这几种模式背后的工作原理是什么呢...

Q吹个大气球Q
2018/10/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何快速为网站选择合适的SSL证书

随着HTTPS普及,越来越多用户开始采用SSL证书,来对HTTP进行加密,升级到HTTPS。但面对各种不同的SSL证书,用户应如何选择?安信SSL证书将为大家讲解: 一、按SSL证书类型选择 DV SSL证书:域...

安信证书
31分钟前
2
0
被嫌弃的eval和with

本文转载于:专业的前端网站➥被嫌弃的eval和with 前面的话   eval和with经常被嫌弃,好像它们的存在就是错误。在CSS中,表格被嫌弃,在网页中只是用表格来展示数据,而不是做布局,都可能被...

前端老手
33分钟前
4
0
Allegro非常实用的快捷键-PCB环境

立题简介: 内容:简单介绍Allegro绘制的PCB环境下的快捷键; 来源:实际使用得出; 作用:对Allegro绘制PCB快捷键进行介绍; PCB环境:Cadence 16.6; 立题详解: 对“allegro”板而言,其在...

demyar
41分钟前
1
0
润乾报表与 ActiveReport JS 功能对比

简介 润乾报表是用于报表制作的大型企业级报表软件,核心特点在于开创性地提出了非线性报表数学模型,采用了革命性的多源关联分片、不规则分组、自由格间运算、行列对称等技术,使得复杂报表...

泡泡糖儿
42分钟前
1
0
仿微信打飞机游戏网页版,基于cocos2d-js游戏引擎,在线试玩,内含源码

早几年研究cocos2d的demo项目,这个是基于cocos2d-js游戏引擎,整个游戏用js编写。 玩法:鼠标拖动飞机移动即可 试玩地址 源码地址 游戏截图: 文件说明 cocos2dx:游戏引擎 res:存放游戏素...

tanghc
44分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部