//此系列博文是《第一行Android代码》的学习笔记,如有错漏,欢迎指正!

  活动的启动模式共有四种: standard、singleTop、singleTask 和 singleInstance。可以在Manifest文件中通过给<activity>标签指定android:launchMode属性来选择启动模式。下面我们逐个看看:
一、standard模式

  standard 是活动默认的启动模式。在 standard 模式(即没有显示指定其他的启动方式)下,每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。对于使用
standard 模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。

  所以,假如我们在主活动中加入下面代码,我们每按一次button 1,就会创建一个新的MainActivity,即使原来的MainActivity已经在栈顶:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("MainActivity", this.toString());
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
Button button1 = (Button) findViewById(R.id.button_1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MainActivity.class);
startActivity(intent);
}
});
}

二、 singleTop模式

  相比standard模式,在 singleTop模式下, 假若在启动活动时如果系统发现返回栈的栈顶已经是该活动, 则认为可以直接使用它,不会再创建新的活动实例。当要指定一个活动的启动模式为singleTop时,我们只需在manifest文件添加 android:launchMode="singleTop" 语句即可:

 <activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:label="This is MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

  不过此时假如我们在MainActivity中通过一个按钮启动了second_activity,然后又在second_activity中按下了一个按钮再启动MainActivity的话,那么此时的返回栈中是有两个MainActivity实例的。

三、singleTask模式

  当活动的启动模式指定为 singleTask,每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。这样能保证该活动在整个返回栈只有一个实例。

四、singleInstance模式

  与以上三种启动模式不同, 当一个活动指定为 singleInstance 模式,系统会启用一个新的返回栈来管理这个活动,假如我们注册了三个活动:A,B,C,其中A和C为standard模式,B为singleInstance模式。然后我们通过A来启动B,再通过B来启动C。此时A和C在同一个返回栈stack1,且A在栈底,C在栈顶,而B则字另一个栈stack2。当我们按下back键时,C首先出栈,再按一次back,A出栈,这时当前的返回栈已经空了,于是就显示了另一个返回栈的栈顶活动,在按第三次back键时,才是B出栈。

  //End.

Android学习笔记(六)——活动的启动模式的更多相关文章

  1. 10月9日Android学习笔记:活动与服务之间的通信

    最近在照着<第一行代码>这本书来学安卓,顺便记下笔记.主要的内容是Android中服务的第二种启动方式,通过活动绑定服务来启动服务,实现活动与服务之间的通信. 一. 首先创建一个服务类 p ...

  2. android学习笔记六——Spinner

    注:参考http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0105/2264.html Spinner ==> Spinner ...

  3. Android学习笔记六:六大布局

    六大界面布局方式包括: 线性布局(LinearLayout).帧布局(FrameLayout).表格布局(TableLayout).相对布局(RelativeLayout).绝对布局(Absolute ...

  4. android学习笔记六

    Android中Activity的Intent大全 Api Level 3: (SDK 1.5) android.intent.action.ALL_APPS android.intent.actio ...

  5. Android学习之基础知识四-Activity活动7讲(活动的启动模式)

    在实际的项目开发中,我们需要根据特定的需求为每个活动指定恰当的启动模式.Activity的启动模式一共有4种:standard.singleTop.singleTask.singleInstance. ...

  6. Android:活动的启动模式

    启动模式一共有四种,分别是 standard .singleTop . singleTask 和 singleInstance , 可 以 在 AndroidManifest.xml 中 通 过 给 ...

  7. 【转】 Pro Android学习笔记(七六):服务(1):local和remote

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Android提供服务,服务是运行在后台的 ...

  8. 【转】 Pro Android学习笔记(五一):ActionBar(4):标准和Tab模式

    之前,我们学习的Action Bar是标准模式,Tab模式的如下图所示. 对于Tab,我们在Android学习笔记(二二): 多页显示-Tag的使用中学习过,但Action Bar的tab更适合fra ...

  9. 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式

    可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...

随机推荐

  1. js日期加减

    先补充下基础知识: var myDate = new Date(); //myDate默认返回当前时间 myDate.getYear(); //获取当前年份(2位) myDate.getFullYea ...

  2. Runner站立会议07

    开会时间:21.10~21.30 地点:基教负一 今天做了什么:看网上下载的日历代码 明天准备做什么:继续看代码 遇到的困难:下载的代码有很多看不懂的地方,很多包.函数等都不知道 会议图: 燃尽图:

  3. Java链表

    链表的每一个节点中除了要保存本身的内容之后,还要保存下一个节点的引用 简单的建立一个链表,表头是root //============================================= ...

  4. C# JIT & AOT

    http://msdn.microsoft.com/library/z1zx9t92 http://msdn.microsoft.com/en-us/library/ht8ecch6(v=vs.90) ...

  5. json 是个什么东西?

    JSONP原理 JSONP(JSON with Padding),就是异步请求跨域的服务器端时,不是直接返回数据,而是返回一个js方法,把数据作为参数传过来.如果只是跨域传递数据那么这种方式是比较好的 ...

  6. 字体投影(test-shadow)与框架投影(box-shadow)

    字体投影:text-shadow: 1px 1px 1px #ccc; 框架投影:box-shadow: 10px 10px 25px #ccc;

  7. 对Java Serializable(序列化)的理解和总结

    我对Java Serializable(序列化)的理解和总结 博客分类: Java技术 JavaOSSocketCC++  1.序列化是干什么的?       简单说就是为了保存在内存中的各种对象的状 ...

  8. Spring系列之基本配置

    一.概述Spring是一个轻量级的Java开源框架,是为了简化企业级系统开发而诞生的.Spring的核心是控制反转(IOC)和面向切面编程(AOP).主要有以下几个特点:(1)轻量:从大小和开销两方面 ...

  9. 浅谈JavaScript原型对象与相关设计模式

    引言 本文先从介绍JavaScript中基本的几种设计模式开始,最后引出原型对象,然后对原型对象有一个较全面的介绍. 1.创建对象的几种设计模式 A.工厂模式 我们知道在JavaScript中创建对象 ...

  10. 如何更好地利用Pmd、Findbugs和CheckStyle分析结果

    这里列出了很多Java静态分析工具,每一种工具关注一个特定的能发挥自己特长的领域,我们可以列举一下: Pmd 它是一个基于静态规则集的Java源码分析器,它可以识别出潜在的如下问题:– 可能的bug— ...