Activity的启动模式
-
standard 标准模式
系统默认的模式 每次启动一个Activity都会重新创建一个新的实例,不管这个实例是否存在
Application的Context不能启动Activity
由于每次启动的Activity都会运行在启动它的那个Activity所在的栈中,所以当我们用ApplicationContext去启动standard模式的Activity时,因为非Activity类型的Context没有所谓的任务栈,所以此时会报错,AndroidRuntimeException
解决这个问题的方法是为待启动的Activity指定
FLAG_ACTIVITY_NEW_TASK
标记位,这样在启动此Actvity的时候就会为他创建一个新的任务栈,此时实际上是以SingleTask模式启动的Activity -
SingleTask 栈内复用模式
这是一种单例模式 只要Activity在一个栈中存在 那么多次启动都不会重新创建实例,
这种模式会回调
onNewIntent
这种模式具有clearTop的效果,会使栈内当前Activity上面的的Activity都全部出栈
-
SingleTop 栈顶复用模式
如果Activity已经处于任务栈顶栈顶,那么此Activity就不会重新创建 同时会回调
onNewIntent
方法,不会调用onCreate onStart -
SingleInstance 单实例模式
这是一种加强的SingleTask,除了具有SingleTask的所有特性以外,另外,此种模式的Activity只能单独的位于一个栈中
Activity所需的任务栈
默认情况下,所有Activity所需的任务栈的名字为应用的包名
我们可以单独的为每个Activity指定taskAffinity属性来指定任务栈
Activity的Flag
指定启动模式
FLAG_ACTIVITY_NEW_TASK 为Activity指定SingleTask启动模式
FLAG_ACTIVITY_SINGLE_TOP 为Activity指定SingleTop启动模式
影响运行状态
FLAG_ACTIVITY_CLEAR_TOP clearTop效果,同一个任务栈中所有位于它上面的Activity都出栈
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 不会出现在历史Activity列表里 与android:excludeFromRecents="true"的效果相同