Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6275692
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: Android平台

2014-12-28 11:25:31

原文地址:Activity的launchMode 作者:云少嘎嘎嘎

    在manifest.xml文件中,我们可以为Activity指定launchMode,总共有四种,弄清楚这四种的区别在Android开发中还是非常有必要的,下面分别来讨论:

     1. standard,这种是默认的模式,Activity可以创建很多的实例,不管这些实例是不是在同一个任务中。可以简单理解只要调用startActivity就会创建一个新的实例。
    
     2.singleTop,基本同standard相同,唯一的区别就是如果当前有这个Activity的实例在当前任务栈的最上面,就不会再创建新的实例了,而是会调用其onNewIntent方法。例如当然任务栈中几个Activity: A-B-C-D, D是最上面的也就是当前显示的Activity,现在有个Intent要启动D,如果D是standard模式,启动后的任务栈就是A-B-C-D-D,如果是singleTop模式,启动后的任务栈就是A-B-C-D,并且D的onNewIntent方法会被调用。

     3.singleTask, 只会有一个实例,如果还没有实例,就会创建一个新的任务栈,并且创建一个实例放到这个栈中;如果已经有实例了只会调用其onNewIntent方法。

     4.singleInstance, 基本同singleTask一样,区别就是任务栈中只会并且仅能有这样一个实例。如果在这个实例中启动其他的Activity,都会创建一个新的任务。

    另外在StartActivity的时候,还可以在Intent中指定Flag, 这些Flag有:

     1.FLAG_ACTIVITY_NEW_TASK, 同singleTask.
     2.FLAG_ACTIVITY_SINGLE_TOP, 同singleTop.
     3.FLAG_ACTIVITY_CLEAR_TOP, 如果Activity已经启动并且在任务栈中了,就会将其上面的所有Activity销毁,将这个Activity置于最上面,也会调用onNewInent方法.

     如果launchMode和Flag冲突怎么办?Flag有优先权。

     参考文献:http://developer.android.com/guide/components/tasks-and-back-stack.html

    如果有ABCD四个Activity,AB是singleInstance,CD是standard,按照A-C-B-D的顺序启动,然后依次按back键,后退的顺序是什么呢?答案是D-C-B-A。为什么会这样呢?我们再来看一下singleInstance的说明,其任务栈中只有并且仅有一个实例,所以启动A创建一个任务栈,启动C就会创建一个新的任务栈,再启动B又创建了一个新的任务栈,再启动D就不会创建新的任务栈了,而是压入到C的上面。所以总共会有三个任务栈,退出的顺序也会如上所说那样。如果启动顺序为A-C-B-D-A,后退的顺序会是什么呢?答案是A-D-C-B,原理同上面一样。
    
    如果AB是singleTask,按照A-C-B-D的顺序启动,然后依次按back键,后退的顺序是 D-B-C-A.如果启动顺序为A-C-B-D-A会出现什么情况呢?结果是只有A还活着,其它的都会被杀死。
  

阅读(806) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~