Activity四种启动模式及其应用场景

standard 、 singleTop 、 singleTask 、 singleInstance
(1) standard
默认的启动模式,每次该模式启动一个Activity都会重新创健一个新的实例。这种模式下,谁启动了该模式的Activity,每次启动一个Activity,该Activity就属于启动它的Activity的任务栈中。这个Activity它的 onCreate(),onStart(),onResume()方法都会被调用。
配置形式:


(2) singleTop 栈顶复用模式
如果新的activity已经位于栈顶,那么这个Activity不会被重新创建,同时它的onNewIntent方法会被调用,通过此方法的参数我们可以去除当前请求的信息。如果栈顶不存在该Activity的实例,则情况与 standard模式相同。这个Activity它的onCreate()、onStart()方法不会被调用
配置形式:

使用:
通常适用于接受到消息后显示的界面,例如:QQ接收到消息后弹出Activity(如果一次来10条消息,不能一次弹10个Activity)

(3) singleTask
栈内复用,只要Activity在栈内存在,那么多次启动该Activity都不会创建新的Activity实例,默认具有clear top的效果
使用:
浏览器的主界面,不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent(),并且会清空主界面上面的其他页面

(4) singleInstance
模式比较特殊,它会启用一个新的栈结构,将Activity放置于这个新的栈结构中,并保证不再有其他的Activity实例进入在singleTask的基础上,限制了此模式的Activity只能单独地位于一个任务栈中
使用:
适合需要与程序分离开的页面,例如:闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,
跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。

注意:
FLAGE_ACTIVITY_NEW_TASK,这个标志位对应于AndroidManifest中设置的“singleTask” 
FLAGE_ACTIVITY_SINGLE_TOP,这个标志位对应于AndroidManifest中设置的“singleTop” 
FLAGE_ACTIVITY_CLEAR_TOP,当Activity设置此标志位后,启动它时,在同一任务栈中所有位于它之上的Activity都会出栈。比
如栈自底向上依次是:MainActivity—ActivityA—ActivityB,各个Activity 的launchMode还是给出的AndroidManifest中的定义,
这个时候如果再启动ActivityA,同时设置了flag为FLAGE_ACTIVITY_CLEAR_TOP。那么栈内的自底向上就成了这样:
        MainActivity—ActivityA(此ActivityA实例不是之前栈内的那个,而是新的,之前的已出栈)。

你可能感兴趣的:(Android)