用代码理解Acticity启动模式

本章内容

  1. Activity 四种启动模式的理论知识
  2. 代码理解

Activity 四种启动模式的理论知识

standard

默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。

singleTop

当活动的启动模式指定为 singleTop,在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例,如果不是在栈顶,那么就会再次创建一个实例.

singleTask

启动模式为singleTask的Activity的对象,在整个Activity栈中只会存在一个,并且如果再次启动,Activity栈会清空该实例上面的所有Activity对象,感觉有点抽象,第二部分会用代码清楚的表现出来的。

singleInstance

只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在,并且这会导致一些跳转上的逻辑问题,这个得处理好才行。

代码理解

代码准备

AndroidManifest.xml

 <application  android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity  android:name=".A" android:launchMode="singleTop" />
        <activity  android:name=".B" android:launchMode="singleInstance" />
        <activity  android:name=".C" android:launchMode="singleTask"></activity>
    </application>

这里没有配置MainAcitivy的启动模式,那么它的启动模式就是默认的 standard了。
接下来所有Activity 的画面都是这种

每个Button对应着各自字母开头的Activity

先从简单的跳转、回退开始,每个按钮点三下

连点M,MainActivity–standard

05-21 11:47:21.654 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onPause
05-21 11:47:21.664 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onCreate
05-21 11:47:21.674 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onstart
05-21 11:47:21.674 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onResume
05-21 11:47:22.054 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop
05-21 11:47:22.934 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onPause
05-21 11:47:22.944 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onCreate
05-21 11:47:22.954 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onstart
05-21 11:47:22.954 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onResume
05-21 11:47:23.334 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop
05-21 11:47:24.494 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onPause
05-21 11:47:24.494 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onCreate
05-21 11:47:24.514 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onstart
05-21 11:47:24.514 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onResume
05-21 11:47:24.884 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop

因为我的MainActivity是LAUNCHER,所以才会有开头的 onpause,onstop,可以看到

05-21 11:47:21.664 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onCreate
05-21 11:47:21.674 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onstart
05-21 11:47:21.674 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onResume

这三个Log输出了三次,就是开启了3个MainActivity,Activity栈中已经存在了4个MainActivity,那么必然的退出时候,onDestroy会被执行四次

05-21 11:50:18.894 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onPause
05-21 11:50:18.904 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onRestart
05-21 11:50:18.904 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onstart
05-21 11:50:18.904 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onResume
05-21 11:50:19.284 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop
05-21 11:50:19.284 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onDestroy
05-21 11:50:24.514 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onPause
05-21 11:50:24.524 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onRestart
05-21 11:50:24.524 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onstart
05-21 11:50:24.524 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onResume
05-21 11:50:24.904 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop
05-21 11:50:24.904 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onDestroy
05-21 11:50:26.074 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onPause
05-21 11:50:26.084 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onRestart
05-21 11:50:26.084 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onstart
05-21 11:50:26.084 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onResume
05-21 11:50:26.454 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop
05-21 11:50:26.454 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onDestroy
05-21 11:50:27.564 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onPause
05-21 11:50:27.974 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop
05-21 11:50:27.974 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onDestroy

连点B,BActivity–singleInstance

05-21 11:53:44.224 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onPause
05-21 11:53:44.284 18600-18600/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onCreate
05-21 11:53:44.294 18600-18600/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onstart
05-21 11:53:44.294 18600-18600/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onResume
05-21 11:53:44.604 18600-18600/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop
05-21 11:53:46.884 18600-18600/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onPause
05-21 11:53:46.884 18600-18600/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onResume
05-21 11:53:47.864 18600-18600/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onPause
05-21 11:53:47.864 18600-18600/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onResume

正如理论说的那样,跳转BActivity所产生的栈,只会存在一个B的实例,在log输出中确实只输出了一次

05-21 11:53:44.284 18600-18600/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onCreate
05-21 11:53:44.294 18600-18600/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onstart

之后的输出就只有

05-21 11:53:47.864 18600-18600/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onPause
05-21 11:53:47.864 18600-18600/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onResume

之前说过,这个模式会导致跳转逻辑有些异常,这次点击的顺序是A-C-B-M

05-21 12:09:43.374 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onPause
05-21 12:09:43.374 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onCreate
05-21 12:09:43.384 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onstart
05-21 12:09:43.384 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onResume
05-21 12:09:43.784 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop
05-21 12:09:49.394 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onPause
05-21 12:09:49.414 28588-28588/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onCreate
05-21 12:09:49.424 28588-28588/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onstart
05-21 12:09:49.424 28588-28588/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onResume
05-21 12:09:49.814 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onStop
05-21 12:09:51.384 28588-28588/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onPause
05-21 12:09:51.434 28588-28588/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onCreate
05-21 12:09:51.444 28588-28588/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onstart
05-21 12:09:51.444 28588-28588/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onResume
05-21 12:09:51.734 28588-28588/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onStop
05-21 12:09:55.584 28588-28588/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onPause
05-21 12:09:55.594 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onCreate
05-21 12:09:55.604 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onstart
05-21 12:09:55.604 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onResume
05-21 12:09:55.994 28588-28588/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onStop

按照正常的逻辑,返回的顺序应该是M-C-B-A,但是实际上真正的顺序是M-C-A-B:

05-21 12:13:05.944 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onPause
05-21 12:13:05.954 28588-28588/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onRestart
05-21 12:13:05.954 28588-28588/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onstart
05-21 12:13:05.954 28588-28588/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onResume
05-21 12:13:06.344 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop
05-21 12:13:06.354 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onDestroy
05-21 12:13:06.924 28588-28588/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onPause
05-21 12:13:06.934 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onRestart
05-21 12:13:06.934 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onstart
05-21 12:13:06.934 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onResume
05-21 12:13:07.314 28588-28588/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onStop
05-21 12:13:07.314 28588-28588/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onDestroy
05-21 12:13:08.644 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onPause
05-21 12:13:08.654 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onRestart
05-21 12:13:08.654 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onstart
05-21 12:13:08.654 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onResume
05-21 12:13:09.034 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onStop
05-21 12:13:09.034 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onDestroy
05-21 12:13:10.284 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onPause
05-21 12:13:10.294 28588-28588/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onRestart
05-21 12:13:10.294 28588-28588/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onstart
05-21 12:13:10.294 28588-28588/cjh.lauchmode D/tag-B--singleInstance: tag-B--singleInstance- onResume

最后看到的才是B,这个是因为在跳转B之后,又跳转了一次M:
singleInstance启动了另一个栈,也就是说现在有两个栈,第一个栈从上到下是:M-C-A。另一个栈就是B一个实例,最后一次跳M的操作,让我们从B栈回到了第一个栈,那么接下来不断的返回,看到的也会是第一个栈中的Activity了,顺序是 M-C-A,第一个栈清理完了,接下来才会看到B栈。

连点A, AActivity–singleTop,对于A这里会做不一样的操作,先点一下A,在点一下M,最后点两下A

05-21 12:00:30.704 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onPause
05-21 12:00:30.714 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onCreate
05-21 12:00:30.724 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onstart
05-21 12:00:30.724 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onResume
05-21 12:00:31.104 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop
05-21 12:00:32.314 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onPause
05-21 12:00:32.324 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onCreate
05-21 12:00:32.334 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onstart
05-21 12:00:32.334 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onResume
05-21 12:00:32.704 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onStop
05-21 12:00:33.924 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onPause
05-21 12:00:33.934 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onCreate
05-21 12:00:33.944 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onstart
05-21 12:00:33.944 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onResume
05-21 12:00:34.334 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop
05-21 12:00:35.264 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onPause
05-21 12:00:35.264 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onResume

可以看到log中当第二次点击A这个Button的时候,发现AActivity不再栈顶,那么就会重新创建一次,第三次点击发现在栈顶,就只会调用onResume这个方法了,最后的栈中从上到下的顺序就是 A-M-A-M,所以退出的时候,整个log中onDestroy的方法只会被调用4次

05-21 12:04:54.604 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onPause
05-21 12:04:54.614 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onRestart
05-21 12:04:54.614 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onstart
05-21 12:04:54.614 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onResume
05-21 12:04:55.004 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onStop
05-21 12:04:55.004 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onDestroy
05-21 12:04:56.964 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onPause
05-21 12:04:56.974 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onRestart
05-21 12:04:56.974 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onstart
05-21 12:04:56.974 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onResume
05-21 12:04:57.354 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop
05-21 12:04:57.354 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onDestroy
05-21 12:04:58.294 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onPause
05-21 12:04:58.304 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onRestart
05-21 12:04:58.304 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onstart
05-21 12:04:58.304 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onResume
05-21 12:04:58.684 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onStop
05-21 12:04:58.684 28588-28588/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onDestroy
05-21 12:04:59.554 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onPause
05-21 12:04:59.984 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop
05-21 12:04:59.984 28588-28588/cjh.lauchmode D/tag-M--standard: tag-M--standard- onDestroy

连点C,CActivity–singleTask,singleTask其实是非常极端的一种模式,它会清空压在它所在栈上面所有压在的Activity实例,这里我们不跳B,无论C怎么强横也不可能去影响到别的栈,那么这次这么跳:A-C-C-M-A-C

05-21 12:21:54.864 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onCreate
05-21 12:21:54.874 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onstart
05-21 12:21:54.874 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onResume
05-21 12:21:55.254 21834-21834/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop
05-21 12:21:56.884 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onPause
05-21 12:21:56.934 21834-21834/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onCreate
05-21 12:21:56.944 21834-21834/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onstart
05-21 12:21:56.944 21834-21834/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onResume
05-21 12:21:57.334 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onStop
05-21 12:21:58.624 21834-21834/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onPause
05-21 12:21:58.624 21834-21834/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onResume
05-21 12:22:00.634 21834-21834/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onPause
05-21 12:22:00.634 21834-21834/cjh.lauchmode D/tag-M--standard: tag-M--standard- onCreate
05-21 12:22:00.644 21834-21834/cjh.lauchmode D/tag-M--standard: tag-M--standard- onstart
05-21 12:22:00.644 21834-21834/cjh.lauchmode D/tag-M--standard: tag-M--standard- onResume
05-21 12:22:01.024 21834-21834/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onStop
05-21 12:22:03.374 21834-21834/cjh.lauchmode D/tag-M--standard: tag-M--standard- onPause
05-21 12:22:03.394 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onCreate
05-21 12:22:03.404 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onstart
05-21 12:22:03.404 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onResume
05-21 12:22:03.804 21834-21834/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop
05-21 12:22:08.194 21834-21834/cjh.lauchmode D/tag-M--standard: tag-M--standard- onDestroy
05-21 12:22:08.194 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onPause
05-21 12:22:08.214 21834-21834/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onRestart
05-21 12:22:08.214 21834-21834/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onstart
05-21 12:22:08.214 21834-21834/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onResume
05-21 12:22:08.584 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onStop
05-21 12:22:08.584 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onDestroy

从最后的log中可以看到,当我最后一次跳C的时候,栈中有一个A和M已经被销毁了

05-21 12:22:03.804 21834-21834/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop
05-21 12:22:08.194 21834-21834/cjh.lauchmode D/tag-M--standard: tag-M--standard- onDestroy
05-21 12:22:08.194 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onPause
05-21 12:22:08.214 21834-21834/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onRestart
05-21 12:22:08.214 21834-21834/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onstart
05-21 12:22:08.214 21834-21834/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onResume
05-21 12:22:08.584 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onStop
05-21 12:22:08.584 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onDestroy

这里被销毁的A和M其实就是压在C上的Acticity的实例,回退就更加直观了

05-21 12:24:41.364 21834-21834/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onPause
05-21 12:24:41.374 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onRestart
05-21 12:24:41.374 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onstart
05-21 12:24:41.374 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onResume
05-21 12:24:41.754 21834-21834/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onStop
05-21 12:24:41.754 21834-21834/cjh.lauchmode D/tag-C--singleTask: tag-C--singleTask- onDestroy
05-21 12:24:42.274 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onPause
05-21 12:24:42.284 21834-21834/cjh.lauchmode D/tag-M--standard: tag-M--standard- onRestart
05-21 12:24:42.284 21834-21834/cjh.lauchmode D/tag-M--standard: tag-M--standard- onstart
05-21 12:24:42.284 21834-21834/cjh.lauchmode D/tag-M--standard: tag-M--standard- onResume
05-21 12:24:42.654 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onStop
05-21 12:24:42.654 21834-21834/cjh.lauchmode D/tag-A--singleTop: tag-A--singleTop- onDestroy
05-21 12:24:43.934 21834-21834/cjh.lauchmode D/tag-M--standard: tag-M--standard- onPause
05-21 12:24:44.384 21834-21834/cjh.lauchmode D/tag-M--standard: tag-M--standard- onStop
05-21 12:24:44.384 21834-21834/cjh.lauchmode D/tag-M--standard: tag-M--standard- onDestroy

可以看到,尽管我跳入是跳了5个Activity,但是最后退出却只输出了3次 onDestroy(),并且是在 C 销毁之后输出的,那么显然压在C上的实例早就被销毁了。

到此,对4个开启模式已经讲完了,有补充请留言,谢谢(卡哭哇啦一)!最后是Demo地址,虽然没什么,不过想想还是会有懒得童鞋的:http://download.csdn.net/detail/cjh_android/9527024

你可能感兴趣的:(用代码理解Acticity启动模式)