Android之Activity的四种启动模式

来源:互联网 发布:淘宝三只松鼠 编辑:程序博客网 时间:2024/05/22 04:24

每个应用程序都有一个或者多个Activity组成,因此Android内部使用通过退回栈来管理Activity实例。栈是一种先进后出的集合,对于Android来说,当前的activity就在栈顶,当用户点击后退或者点击应用上的返回按钮,系统就会将栈顶的activity出栈,此时原来栈顶下的activity就会显示在设备上。在Android系统中有4种启动模式,用户可以在清单文件中注册activity时设置他的启动模式:

<activity

Android:launchMode=”启动模式

/>

activity的启动模式分为:standardsingleTopsingleTasksingleInstance

1、standard标准启动模式

这是activity的标准启动模式,也是activity的默认启动模式,在这种模式下activity可以被多次实例化,既在同一个任务栈可以在多个activity实例,每个实例都会处理一个intent对象。如果activityA的启动模式为standard,并且已经有个ActivityA被启动,在该Activity调用startActivity会启动一个新的ActivityA的实例。

ActivityA

ActivityA

ActivityA

 

 

2、singleTop

如果一个以singleTop模式启动的Activity的实例已经存在于任务栈的栈顶,那么再启动这个Activity时,不会创建新的实例,而是重用位于栈顶的那个实例,并且会调用该实例的onNewIntent()函数将intent对象传递到这个实例中。例如ActivityA的启动模式为singleTop,并且该实例已经存在栈顶,那么在调用startActivity启动另一个ActivityA时,不会再次创建ActivityA的实例,而是重用原来的实例,并且调用原来实例的onNewIntent()函数,此时任务栈中还是这一个ActivityA的实例。

如果以singleTop模式启动的Activity的一个实例不在栈顶,但是存在任务栈中,那么他的行为和standard模式相同也会创建一个新的实例。

ActivityA

ActivityB

   

ActivityA

ActivityB

栈顶的ActivityA被重用

ActivityB

ActivityA

 

ActivityA

ActivityB

ActivityA

不在栈顶,重新创建一个ActivityA

3、singleTask

singleTask模式是常用的启动模式,如果一个Activity设置了改启动模式,那么在一个任务栈中只能有一个Activity的实例。如果任务栈中还没有该Activity,会新创建一个实例并放在栈顶。但是如果已经存在Activity系统销毁处在该Activity上的所有Activity,最终让该Activity实例处于栈顶,同时回调该ActivityonNewIntent()函数。

ActivityC

ActivityB

ActivityA

 

ActivityA

 

 

 

4、singleInstance

设置了singleInstance模式的Activity会在一个独立的任务中开启,并且这个新的任务中有并且只有这一个实例。也就是说被该实例启动的其他Activity会自动运行于另一个任务中。当再次启动该Activity实例的时候,会重用已存在的任务和实例。并且会调用该实例的onNewIntent()函数,将intent实例传递到该实例中。

 

0 0