Android启动模式

来源:互联网 发布:王奕霏编程 编辑:程序博客网 时间:2024/06/03 20:56

文章摘自Android开发艺术探索

Android在Activity启动时有四种启动方式:standard、singleTop、singleTask、singleInstance,下面分别介绍启动模式的含义:

1、standard: 标准模式,也是默认启动模式,每次启动一个Activity都会重新创建一个新的实例,不管这个实例是否存在。当我们用ApplicationContext去启动standard模式的Activity的时候会报错:android.until.AndroidRuntimeException:Calling startActivity from outside of and Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 这是因为standard模式的activity默认会进入启动它的Activity所属的任务栈中,但是由于非activity类型的Context并没有所谓的任务栈,所以会出现问题。解决的办法:为待启动的activity指定FLAG_ACTIVITY_NEW_TASK 标记位。

2、singleTop: 栈顶复用模式。在这种模式下,如果新的Activity已经位于任务栈的栈顶,那么此activity不会被重新创建,同时它的onNewIntent方法会被调用,通过此方法的参数我们可以取出当前请求的信息。

3、singleTask: 栈内复用模式。这是一种单实例模式,在这种模式下,只要activity在一个栈中存在,那么多次启动此activity都不会重新创建实例,和singleTop一样,系统会调用onNewIntent。具体一点,当一个具有singleTask模式的activity请求启动后,比如activity A,系统首先会寻找是否存在A想要任务栈,如果不存在,就重新创建一个任务栈,然后创建A实例后把A放入栈内,若果存在A所需的任务栈,这时要看A是否在栈中有实例存在,如果有实例存在,那么系统就会把A调到栈顶并调用它的onNewIntent方法,如果不存在,就创建A的实例并把A压入栈中。

4、singleInstance: 单实例模式。它除了具有singleTask的所有特性外,就是此模式的activity只能单独的存在一个任务栈中。

TaskAffinity

TaskAffinity属性主要和singleTask启动模式或者allowTaskReparenting属性配对使用,其他情况下没有意义。当TaskAffinity和singleTask配对使用的时候,他是具有该模式的activity的目前任务栈的名字,待启动的activity会运行在名字和TaskAffinity相同的任务栈中。

0 0
原创粉丝点击