AMS相关(一)——AMS与进程管理

AMS相关(一)——AMS与进程管理

AMS即Activity Manager Service,是Android系统的核心服务,负责四大组件的启动、切换、调度,应用进程的管理调度。

Android系统中所有的应用进程都由AMS管理。最直接展示给用户的,就是手机的屏幕。 当长按Home键(展示当前所有程序)时,看到的其实就相当于Task,即一个或多个Activity的集合。

Activity的ActivityRecord会被存放于Task中,而一个或多个Task,则组成了一个完整的BackStack。BackStack,顾名思义,是一个栈结构,后入先出,位于栈顶的,则是展示给用户的Activity。

一个应用程序可以有一个或多个Task,若干个Task以一定顺序存放于BackStack之中。当用户按下返回键时,在不重写返回方法的情况下,BackStack就会让栈顶Activity出栈,同时系统也会将该Activity清除。而手机桌面是一个特殊的Activity,它重写了返回键的方法,当在桌面使用返回键时并不会导致上述操作。

AMS相关(一)——AMS与进程管理_第1张图片

可以看到当手机仅有桌面时,栈顶是launcher。

这时便出现一种问题,当一个Activity被多次打开时,是否真的会重复多次创建新的Activity。由此引入了Android的四种启动模式。

Android的四种启动模式

Android有四种启动模式,分别为standard、singleTop、singleTask、singleInstance,可以通过AndroidManifest的launchMode设置。

1)standard

标准模式,也是默认模式。它会重复创建Activity,这样会导致Activity重复创建,栈也会越来越深,返回时要点多次。

AMS相关(一)——AMS与进程管理_第2张图片

写了个简易的测试程序,ActivityA有个按钮打开ActivityB,B有个按钮能打开A,A和B都是Standard模式时,先点按钮打开B后再点打开A。可见此时的栈是 A-B-A-L。 

2)singleTop

栈顶复用,即当你要新建Activity时,如果Activity在栈顶,则不创建新的Activity,重复使用栈顶的Activity。

在标准模式下,当ActivityA有个按钮打开ActivityB,B有个按钮也能打开B时,一直按按钮,会出现如下的Task

AMS相关(一)——AMS与进程管理_第3张图片

而当将ActivityB设置成singleTop,并不会创建新的Activity。

 3)singleTask

当Task中含有该Activity时,会将该Activity顶部的Activity全部出栈,而让其成为栈顶。

AMS相关(一)——AMS与进程管理_第4张图片

设置A为SingleTask,当打开顺序为A-B-A时,Task中只有A存在。

4)singleInstance 

该模式中开启重复Activity时,会从整个BackStack中寻找,如果有则复用,没有则新建,新建时总会位于一个新的Task中。

设置A为singleInstance,B为Standard时,打开顺序为ABABAB时,A,B分别位于两个Task中,且Task只有其本身。(关于B是Standard却没有新建Activity我也不太懂,求指教) 

AMS相关(一)——AMS与进程管理_第5张图片

设置A为Standard,B为singleInstance时,打开顺序ABABAB...,B单独处于一个Task且被复用,而A因为是Standard则新建Activity。 

当有多个Activity都为singleInstance时,它们分别单独处于一个Task且被复用。

 

你可能感兴趣的:(Android,android)