Activity四种启动模式

来源:互联网 发布:贵金属交易软件 编辑:程序博客网 时间:2024/06/07 15:26

          Activity启动模式一共有四种,分别是standard(标准模式)、SingleTop(栈顶复用模式)、SingleTask(栈内复用模式)、SingleInstance(单实例模式即加强版的SingleTask,独自占用一个任务栈)

         Activity启动模式的指定一共有两种方式,一种是直接在配置文件里指定,另一种是通过Intent的flag标志指定

     默认是standard模式:每次启动都会创建新的实例

    SingleTop栈顶复用模式:如果要启动的Activity位于栈顶则不会创建新的实例,而是调用onNewIntent方法

    SingleTask栈内复用模式:系统首先会查找它所想要的任务栈是否存在,

                                               1、存在:则查看该任务栈中是否存在它的实例

                                                                1)如果存在就会把它之上的Activity弹出而保证它在栈顶,对应的onNewIntent方法会被执行,

                                                                2)如果不存在则创建其实例压入栈内

                                              2.不存在:创建需要的任务栈,创建其实例压入栈内

  SingleInstace单实例模式即加强版的SingleTask,独自占用一个任务栈

       上面提到的所想要的任务栈指的是通过TaskAffinity指定的,默认情况下任务栈为包名,如果要指定的话必须与包名不一致

TaskAffinity属性主要和SingleTask启动模式及allowTaskReparenting属性配对使用

和allowTaskReparenting结合的时候:应用A启动了应用B的一个Activity,如果此Acitivity的属性allowTaskReparenting为true的话,当B应用被启动时,此Acitivity会从应用A的任务栈转移到应用B的任务栈。

allowTaskReparenting的官方定义是“Whether or not the activity can move from the task that started it to the task it has an afinity for when that task is next brought to the front — "true" if it can move, and "false" if it must remain with the task where it started.

翻译:决定一个Activity是否能从开启它的任务栈转移到TaskAffinity属性所指定的任务栈中,指定为true的话可以转移,false的话只能待在开启它的任务栈中即不能转移

但是实际检验的时候不管是true还是false都可以转移,这是为什么呢?希望知道的大神解释一下,


  

原创粉丝点击