Activity 的启动模式

来源:互联网 发布:飞控源码 编辑:程序博客网 时间:2024/05/16 12:14

   Activity 的启动模式一共有四种,分别是 standard、singleTop、singleTask 和 singleInstance,可以在 AndroidManifest.xml 中通过给 <activity> 标签指定 Android:launchMode 属性来选择启动模式。

1.  standard

        standard 是 Activity 默认的启动模式,在不进行显示指定的情况下,所有的 Activity 都会自动使用这种启动模式。在 standard 模式(即默认情况)下,每当启动一个新的 Activity,它就会在返回栈中入栈,并处于栈顶的位置。对于使用 standard 模式的 Activity,系统不会在乎这个 Activity 是否已经在返回栈中存在,每次启动都会创建该 Activity 的一个新实例。

2.  singleTop

        可能在有些情况下,你会觉得 standard 模式不太合理。Activity 明明已经在栈顶了,为什么再次启动的时候还要创建一个新的 Activity 实例呢?别着急,这只是系统默认的一种启动模式而已,你完全可以根据自己的需要进行修改,比如说使用 singleTop 模式。当 Activitiy 的启动模式指定为 singleTop,在启动时如果发现返回栈的栈顶已经是该 Activitiy,则认为可以直接使用它,不会在创建新的 Activitiy 实例。

3.  singleTask

        使用 singleTop 模式可以很好地解决重复创建栈顶 Activitiy 的问题,但是如果该 Activitiy 并没有处于栈顶的位置,还是可能会创建多个 Activity 实例的。那么有没有什么办法可以让某个 Activity 在整个应用程序的上下文中只存在一个实例呢?这就要借助 singleTask 模式来实现了。当 Activity 的启动模式指定为 singleTask,每次启动该 Activity 时系统首先会在返回栈中检查是否存在该 Activity 的实例,如果发现已经存在则直接使用该实例,并把这个 Activity 之上的所有 Activity 统统出栈,如果没有发现就会创建一个新的 Activity 实例

4.  singleInstance

        singleInstance 模式应该算式四种启动模式中最特殊也最复杂的一个了,不同于以上三种启动模式,指定为 singleInstance 模式的 Activity 会启动一个新的返回栈来管理这个 Activity(其实如果 singleTask 模式指定了不同的 taskActivity,也会启动一个新的返回栈)。那么这样做有什么意思呢?想象一下场景,假设我们的程序中有一个 Activity 是允许其他程序调用的,如果我们想实习其他程序和我们的程序可以共享这个 Activity 的实例,应该如何实现呢?使用前面三种启动模式肯定是做不到的,因为每个应用程序都会有自己的返回栈,同一个 Activity 在不同的返回栈中入栈时必然是创建了新的实例。而使用 singleInstance 模式就可以解决这个问题,在这种模式下会有一个单独的返回栈来管理这个 Activity,不管是哪个应用程序来访问这个 Activity,都共用的同一个返回栈,也就解决了共享 Activity 实例的问题。

 

摘自《第一行代码》

1 0
原创粉丝点击