//此系列博文是《第一行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.

最新文章

  1. WPF学习之路(十二)控件(Range控件)
  2. [LintCode] House Robber 打家劫舍
  3. Rhythmbox中文乱码问题的解决
  4. SPOJ COT2 树上找路径上不同值的个数
  5. spring的annotation-driven配置事务管理器详解
  6. Part 18 Indexes in sql server
  7. Linux Shell 脚本
  8. 解决:The Operation couldn&#39;t be completed.(LaunchServicesError error 0.)
  9. Java或web中解决所有路径问题
  10. Java设计模式04:常用设计模式之建造者模式(创建型模式)
  11. 杭电1233还是畅通project
  12. CodeForces 670A Holidays
  13. Angular专题系列之一:初识Anjularjs
  14. Java中如何封装自己的类,建立并使用自己的类库?
  15. LeetCode算法题-Excel Sheet Column Title(Java实现)
  16. WindowsErrorCode
  17. zabbix系列(五)zabbix3.0.4 探索主机Discovery自动发现主机详细图文教程
  18. C++中基类虚析构函数的作用及其原理分析
  19. WARNING: arch/arm/mach-omap2/built-in.o(.text+0x12cdc): Section mismatch in reference from the function mmc0_init() to the (unknown reference) .init.data:(unknown)
  20. HDU 2319 Card Trick (模拟)

热门文章

  1. 深入JVM-常用Java虚拟机参数
  2. 在Android上实现使用Facebook登录(基于Facebook SDK 3.5)
  3. css002 创建样式和样式表
  4. windows 修改hosts 脚本
  5. 当SVN服务器端IP地址发生变化时,客户端重新定位
  6. C# vs C++ Performance
  7. Nginx报错403 forbidden (13: Permission denied)的解决办法
  8. js随机生成N位数
  9. HTML5 常用的结构化标签整理
  10. JavaScript数据类型--值类型和引用类型