您的位置:首页 > 移动开发

APP开发实战59-Activity启动模式

2016-06-20 21:41 459 查看

16 Activity介绍

16.1Activity启动方式

16.1.1启动模式

(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也只有一个实例。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: