您的位置:首页 > 移动开发 > Android开发

Activity的启动模式

2016-05-27 08:25 471 查看
Activity的启动模式

1.standand:标准模式

2.SingleTop:单栈顶复用模式

3.SingleTask:单任务栈复用模式

4.SingleInstance:单实例模式

解释:

1.Activity  标准的就不用解释了。

2.这种模式下,如果新的Activity已经位于任务栈的栈顶,那么它不会被重新创建。所以不会执行onCreate,onStart方法。回调的onNewIntent方法,通过这个方法的参数拿到传递过来的的信息。如果新的Activity不是位于栈顶,那么此Activity还是会被重新创建的。

3.只要Activity在某个任务栈中已经存在,那么多次启动该Activity都不会被重新创建。此时也不会执行onCReate,onStart方法。会回调onNewIntent()方法。

  3.1:任务栈S1中有Activity  ABC,这个时候ActivityD以SingleTask模式启动。其所需要的任务栈为S2,因为S2和D的实例都不存在,所以系统会先创建任务栈S2,在创建D。

  3.2:如果任务栈中有Activity ABCD,如果此时请求启动B。因为B已经存在于任务栈中,系统会把栈中B上面的实例都pop出去,B作为栈顶。此时任务栈的情况是AB。

4.这种模式继承了SingleTask的所有特点。并且还有一点,就是具有此种模式的Activity只能单独的位于某一个任务栈中。如A启动后,系统会为A先创建一个任务栈。其后再多次请求启动A,都不会重新创建该实例。 

补充:

1.什么是任务栈?

  答:什么是任务栈需要从一个参数讲起:TaskAffinity,可以翻译为任务相关性。这个参数标识了一个Activity所需要的任务栈的名字。默认情况下的所有Activity的TaskAffinity都为应用程序的包名。如果要自己设定,那就设置与包名不一样的。TaskAffinity属性主要和SingleTask启动模式或者allowTaskReParenting属性配对使用,在其他情况下没有意义。

例子:

  Activity        模式                         TaskAffinity

     A                Standard                    默认

    BC             SingleTask                与默认不同为com.yao

     现从A-->B-->C-->A -->B  再按两次返回键会回到桌面。

   解释:A -->B  以为A是标准且TaskAffinity为默认,B不同,所以系统会为B另外创建一个任务栈名为com.yao。B-->C,BC的模式一样,所以C直接入栈com.yao中。

从C启动到A,A是标准模式,则A会直接进入到启动它的Activity的任务栈中。到此时有两个任务栈了,一个为任务栈默认,里面只有A,另一个为任务栈com.yao,里面有BCA

从com.yao中的A再次启动B,关键点在这,因为B为SingleTask模式,实例已经在com.yao中了,所以,系统不会再次创建B,而是直接将B上面的实例移除。所以任务栈com.yao最后只剩下B,此时按一次任务栈com.yao就空了,系统会回到默认任务栈,显示出A,再次返回就直接回到桌面了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 启动模式