16 Activity介绍
(1)Standard模式
这是系统默认的模式,每次启动Activity都会重新创建一个新的Activity实例,也就是onCreate,onStart,onResume流程走一遍,并且一个任务栈里允许存在多个实例。
当我们使用ApplicationContext去启动Activity的时候,因为默认是standard模式会报错:Calling startActivity()from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag.Is this really what you want?
因为standard 模式默认启动的Activity会和启动它的Activity在同一任务栈,而由于ApplicationContext非Activity的Context,并没有所谓的任务栈,所以提示我们需要使用FLAG_ACTIVITY_NEW_TASK来新建一个任务栈并把启动的Activity放进去。
(2)SingleTop模式
在同一个任务栈中栈顶如果有此Activity的实例,那么不会重新创建一个新实例,而是调用此Activity的onNewIntent,此时onCreate、onStart不会被调用。但如果此Activity在同一个任务栈但不在栈顶或之前用Standard模式启动的,就会重新创建。
如ADBCD(第一个D不在栈顶则重新创建),ABCDD(第一个D为Standard模式启动也会重新创建)。
(3)SingleTask模式
在同一个任务栈(注意:不一定是栈顶了)中如果有此Activity的实例,那么不会重新创建一个新实例,而是调用此Activity的onNewIntent,此时onCreate、onStart不会被调用。并且自带FLAG_ACTIVITY_CLEAR_TOP效果。
同一个栈内,如ADBC(要启动D,则把D挪到栈顶,BC由于clearTop而被移除栈,剩下AD)。
如果D指定栈为S2,Android:taskAffinity="S2",而启动它的Activity栈为S1,则先创建S2栈然后再new D放到S2中。
SingleTask模式属于比较常用的启动模式。
(4)SingleInstance模式
这是一种加强的singleTask模式。除了singleTask模式所有特性外,它只能单独在一个任务栈中,跟其他Activity不能同时存在一个任务栈,整个Application也只有一个实例。
网友评论