Activity的四种启动模式

来源:互联网 发布:宏观经济数据库设计 编辑:程序博客网 时间:2024/06/05 20:27

Activity的四种启动模式

在介绍四种启动模式之间需要介绍两个概念:一个是Tasks。Task是用户完成某项具体任务涉及到的Activity的集合;另一个是Back Stack。后台栈是按一定顺序呢存放上述activity的数据结构,既然是栈,则符合后进先出的规则。

一、通过manifest来配置Activity的启动模式

在配置文件中,添加Activity时,可以通过属性launchMode来设置Activity的启动模式,此时可以设置的启动模式有四种:
1. standard模式。标准模式,在这个模式下,会总是生成新的Activity实例,并将Intent传递给该新实例。
2. singleTop模式。在该模式下,当一个activity实例已经在当前Task的顶部,则不会再创建新的实例,而是直接使用该实例,并调用该实例的onNewIntent(),将intent传递给该函数;如果该Activity并不在Task的顶部,则仍然会创建新的Activity实例。
3. singleTask模式。在该模式下,当前的Task内只会存在一个该Activity的实例,当导航到该Activity时,如果已经存在,即使不在Task顶部,也会将该Activity上的其他Activity全部推出栈,使该Activity实例位于顶部,处于激活状态(如不存在会创建;存在会调用onNewIntent方法)。
4. singleInstance模式。该模式下,当前Task内只会存在该Activity实例这一个对象,不会再添加其他。比如,当导航到该Activity时,若不存在,则建立新的Task及新的Activity实例;若存在则导航到已有实例,并调用onNewIntent方法。


下图为singleTask状态下的示意图:
这里写图片描述
通过上图说明:设置为singleTask会将整个Task至于顶部,再点击back键的时候并不能返回调用它的那个Task,而是返回该Task下的其它Activity。

二、通过Intent的setFlags函数来设置Activity的启动模式

  1. FLAG_ACTIVITY_NEW_TASK:千万不要被它的名称所迷惑,经过反复测试,发现设置完这个标识打开Activity,与manifest中配置标准模式一样。当时,当从A 软件,打开B 软件中的Activity时,该Activity会在Task B中打开
  2. FLAG_ACTIVITY_SINGLE_TOP:和manifest中配置的的singleTop模式一样。但是,当从A软件打开B软件中的Activity时,该Activity会在A Task 中打开。
  3. FLAG_ACTIVITY_CLEAR_TOP:设置该模式后,与singleTask的表现类似,但是不同时是每次都会重新创建该Activity,即使Task中已经存在。它只会将栈中该Activity以上的其它Activity移除掉,但仍会重新创建该Activity。但是,当从A软件打开B软件中的Activity时,该Activity会在A Task 中打开。
  4. 当同时设置了FLAG_ACTIVITY_NEW_TASK及FLAG_ACTIVITY_CLEAR_TOP时,表现形势与singleTop一致。并且当从A软件到打开B软件中的Activity时, 该Activity会在Task B中打开。
0 0
原创粉丝点击