Activity的launchMode
1 standard:标准模式 每次启动一个activity都会重新创建一个实例,不管这个实例存不存在,生命周期也 都会调用。在这种模式下,谁启动了这个Activity,这个Activity就运行在启动它的那个activity所在任务栈中。
2 singleTop:栈顶复用模式 如果新的Activity位于栈顶,那么这个activity不会重建,同时它的onNewIntent方法会被调用,通过这个方法可以我们可以取出当前信息。这个acitivity的生命周期不会被系统调用。如果新的activity没有位于栈顶,那么这个activity将会被重建,并位于栈顶。
3singleTask:栈内复用模式。这是一种单例模式,只要activity在一个栈中存在,启动此activity都不会被重建,系统会调用onNewIntent方法并且在其之上的acitivity都会被销毁。不存在则创建压入栈中.
4 singlnstance:单例模式。它除了具有singetask所有特性以外,此类activity只能单独的位于一个任务栈中。由于栈内复用特性,以后的请求均不会新建activity,除非这个任务栈销毁了
TaskAffinity:任务相关性,标识了一个acitivity所需任务栈的名字。默认情况下所有activity所需任务栈的名字为应用的包名。如果想指定TaskAffinity,属性值可以不能与包名相同,否则相当于没有指定。TaskAffinity属性主要和singleTask启动模式或者allowTaskReparenting属性配对使用,其它情况没有意义。当TaskAffinity和singleTask启动模式配对使用的时候,具有此模式的activity,会启动会运行在和TaskAffinity名字相同的任务栈中。当TaskAffinity与allowTaskReparenting结构的啥时候,举个例子,当一个应用A启动了应用B的某个应用Activity后,如果这个Acitivity 属性为true的话,那么应用B启动后,此Activity会直接从A的任务栈中转移到应用B的任务栈中。
Activity指定启动模式有两种,一种在AndroidMenifest中位Activity指定,另一种通过Intent中设置intent.addFlags(...)指定。后者优先级高于第一种。第一种无法直接为Activity设定Flag_ACTIVITY_CLEAR_TOP标识,第二种无法为activity指定singleInstance模式。
Activity的Flags,介绍一下常用的
FLAG_ACTIVITY_NEW_TASK 为activity指定“singleTask”启动模式,和XML中指定启动模式相同
FLAG_ACTIVITY_SINGLE_TOP singleTop启动模式。和XML中指定该模式相同
FLAG_ACTIVITY_CLEAR_TOP 具有此标记的activity,当它启动时,再其之上的activity都要出栈。一般会和singleTask启动模式一起出现,如果是standand模式启动,将会连同它之上的activity都要出栈,系统创建新的Activity,并放入栈顶。
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 具有这个标记的Activity不会出现在历史列表中,相当于XML中android:excludeFromRecents="true"。