Activity启动模式
来源:互联网 发布:eos utility for mac 编辑:程序博客网 时间:2024/06/08 03:25
Android是使用任务(Task)来管理Activity的,一个任务就是一组存放在栈里的Activity的集合,这个栈也被称为返回栈(Back Stack)。栈是一种后进先出的数据结构,在默认情况下,每当我们启动一个新的Activity,它会在返回栈中入栈,并处于栈顶的位置。而每当我们按下Back键或者调用finish()方法去销毁一个活动时,处于栈顶的Activity会出栈,这时前一个入栈的Activity就会重新处于栈顶的位置。我们这里提到的是默认的情况,当然还有其它的几种情况,这里就涉及到我们Activity的启动模式。
Activity总共有四种不同的启动模式,分别为standard、singleTop、singleTask和singleInstance,我们可以在AndroidMainifest.xml中通过<activity>标签指定android:launchMode属性来选择启动模式。
1、standard是Activity默认的启动模式,在该种模式下,每当启动一个新的Activity,它就会在返回栈中入栈,并处于栈顶的位置。对于该种模式启动的Activity,不管该Activity是否存在于返回栈中,都会为该Activity创建一个新的实例。比如:当前返回栈中有ActivityA,这个时候再通过standard模式启动ActivityA,此时,返回栈中的活动便为AA,再启动一个ActivityB,这个时候返回栈中的Activity便为AAB;
2、singleTop,当Activity的启动模式指定为singleTop,在启动Activity时如果发现返回栈栈顶已经是该Activity,则认为可以直接使用该Activity,而不需要重新创建一个新的实例。比如:当前返回栈中Activity为ABC,我们再次创建一个ActivityC,此时,系统直接使用了返回栈栈顶的ActivityC,而不再重新创建,这个时候的返回栈中的Activity还是为ABC。假如我们再次创建的Activity为B,那么则重新创建一个新的实例B,这个时候返回栈的活动为ABCB。因此,singleTop启动模式可以很好解决重复创建栈顶Activity的问题;
3、singleTask,当Activity不存在于栈顶,我们使用standard和singleTop启动模式的话还是会重新创建新的Activity实例。如果,我们需要保证某个Activity在整个应用程序的上下文中只存在一个实例,这个时候就需要使用到singleTask启动模式来实现了。当Activity的启动模式指定为singleTask,每次启动Activity时系统首先会在返回栈中检查是否存在该Activity的实例,如果发现已经存在 则直接使用该实例,同时,把在这个Activity之上的所有Activity通通出栈,如果没有发现该实例的存在,则重新创建一个新的实例 。比如:当前返回栈中的Activity为ABC,我们再次创建一个ActivityB,此时,系统判断到ActivityB存在于返回栈中,直接使用该实例并将其上面的所有Activity出栈,这个时候的返回栈就为AB。假如我们再次创建的Activity为D,那么系统判断到Activity D不存在于返回栈中,那么则重新创建一个新的Activity D实例,这个时候的返回栈为ABCD。
4、singleInstance,该启动模式不同于上面三种启动模式,指定为singleInstance模式的Activity会启动一个新的返回栈来管理这个活动(如果singleTask模式指定了不同的taskAffnity也会启动一个新的返回栈)。比如,当前返回栈1中的Activity为A,当以指定singleInstance启动Activity B时,这个时候会创建一个新的返回栈2,其中的Activity为B,这个时候再以standard启动模式启动Activity C,这个时候返回栈1中的Activity就为AC,而返回栈2中的Activity为B,当前Activity 在前台,我们按下Back键时,由于AC在同一个返回栈中所以返回到Activity A,再按一次Back键,我们才返回到B,我们可以通过Activity中的getTaskId()方法来获取当前Activity所在返回栈的Id值,以此判断两Activity是否处于同一个返回栈中。
- android Activity启动模式
- Android Activity启动模式
- activity启动模式详解
- Activity启动模式1
- activity的启动模式
- Activity有四种启动模式
- Activity启动模式
- activity启动模式分析
- Activity的启动模式
- Activity 启动模式
- Activity启动模式
- Activity的启动模式
- Activity 启动模式
- Activity启动模式总结
- Activity的启动模式
- Activity的启动模式
- Activity 启动模式
- Activity启动模式
- 软件开发中的问题:什么是高内聚、低耦合?
- Linux如何查看进程、杀死进程、启动进程等常用命令
- 康托定理
- 正则环视
- ajax 异步请求后台返回字符串赋值给js参数
- Activity启动模式
- STL入门2
- android之开机跳过锁屏界面自启动应用
- opencv-图像金字塔
- C语言 头文件
- linux IP的设置 修改DNS 解析 hosts生效
- URI,QUERY_STRING 。。。
- 学习
- AS问题之 Can't start Git:git.exe