工作这么久了,一直说写点东西都没具体实施下来,刚好最近不是很忙,以后争取每周1篇左右,这篇比较基础就当练手熟悉一下流程,以后我会尽量写一些深入点的东西,可能是Android也可能是java后台开发相关的,或者是反编译相关的,各位大佬轻喷。
启动模式
这个大家应该都很熟悉,每个Android开发者或多或少都了解一点。
"standard"(默认启动模式)
standard又叫标准模式,是activity默认的启动模式及不设置launchMode属性,则自动会使用该模式。该模式表示的是只要启动该模式的activity就会在同一个任务栈里面创建一个新的实例,该activity可能在栈内存在多个实例。比如任务栈A-B-C,A设置了标准模式,C启动A,任务栈变成了A-B-C-A,然后如果我们按返回键的话出栈顺序就是依次出栈A-C-B-A,
"singleTop"(栈顶复用模式)
该启动模式表示,如果在启动Activity的时候发现该Activity已经存在并且处于当前任务栈栈顶,则复用已经存在的实例,不在创建新的实例而是调用该Activity的onNewIntent()方法。如果该Activity不在栈顶则创建新的实例加入到当前任务栈类,具体类似上面的 标准模式。这种模式的Activity在栈内也可能存在多个实例,并且该模式的Activity可以被实例化多次。
"singleTask"(栈内复用模式)
该启动模式表示,如果在启动Activity的时候发现该activity已经存在,不管在不在栈顶,都会复用已经存在的实例,不在创建新的实例而是调用该Activity的onNewIntent()方法。该操作会将该实例提到栈顶,该实例上面的其他实例会被销毁出栈。比如任务栈d-a-b-c,a设置了singTask模式,c启动a,任务栈会将bc出栈,任务栈变成d-a。
"singleInstance"(单例模式)
该启动模式表示,设置该启动模式的Activity,你可以理解为整个系统只会存在一个实例,并且单独在一个任务栈内,该任务栈有且只有一个该Activity实例。1.不存在,首先会新建一个任务栈,其次创建该Activity实例。 2.存在,则会直接引用该实例,并且回调onNewIntent()方法。该模式可以看成一个特殊的singleTask模式,比如任务栈1(a-b-c-d),任务栈2(e),e为单例模式,d启动e会直接将任务栈2切换到前台并且回调e的onNewIntent()方法。
任务和返回栈
任务我们可以看成是一个activity实例的集合,使用的是栈的方式管理这个集合,通常我们叫他返回栈,activity在栈里面的顺序就是按照我们打开的顺序依次存放。
我们需要知道的是1.任务和返回栈遵循后进先出原则。2.打开或者退出一个activity任务栈都会相应的增加或者减少一个activity实例,任务栈被用来有序的管理这个哪个activity可以与用户交互,只有栈顶的activity才能与用户进行交互。3.在我们退出应用程序时,必须把所有的任务栈中所有的activity清除出栈时,任务栈才会被销毁。当然任务栈也可以移动到后台, 并且保留了每一个activity的状态. 可以有序的给用户列出它们的任务, 同时也不会丢失Activity的状态信息。4.一个应用可能有多个任务栈,一个任务栈也可能是多个应用activity的集合。5.返回键返回的大多数情况下都是返回到上一个activity,有种特殊情况,如果activity设置 了singleTask并且启动的是另外一个应用程序中的Activity,这个时候当发现该Activity正好处于一个后台任务当中的话,就会直接将这整个后台任务一起切换到前台。此时按下返回键会优先将目前最前台的任务(刚刚从后台切换到最前台)进行回退,具体看下图(Android Docs):