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,它重写了返回键的方法,当在桌面使用返回键时并不会导致上述操作。

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

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

Android的四种启动模式

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

1)standard

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

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

2)singleTop

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

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

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

 3)singleTask

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

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

4)singleInstance 

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

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

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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值