ActivityManagerService 简述
简述
这个章节我们会介绍ActivityManagerService,ActivityManagerService是掌管app四大组件的Service,所以应用开发过程中往往接触最多,同时它也是比较复杂的,因为它的工作往往调用栈都很深,在学习的时候很容易就忘了自己看到哪里。不过这个流程在Android12开始WMS结构优化后,已经清晰了不少了,现在大家在学习过WMS之后再来学习AMS会轻松不少,因为它的数据结构用的就是WMS的那些,包括Task和ActivityRecord,在理解WMS的框架后,再来看AMS会比较容易看懂这些流程究竟是在做什么。
前言
Activity启动流程是一个非常重要的流程,它对我们理解app生命周期会有非常大的帮助,Activity启动会分两个场景,一个是进程之前并未启动的情况,需要启动进程,另一个是进程之前已经启动了,我们之需要启动Activity即可。我们会分别来看这两个情况,其中我们还可以了解到app进程是如何启动的,了解这个流程会让应用开发者对Android app进程和平时接触的四大组件有更好的理解。
除此之外我们还会了解一下广播和服务是如何实现的,这两个流程相对于Activity而言会简单一些。
由于startService和bindService流程有不少重合度,所以我们就只看bindService的流程了,bindService流程和Activity启动的流程有很多相似的架构,在看完本章的内容后,应该会对AMS对架构有一些了解,会发现框架这边实现这些功能的套路都是类似的,其实可以把框架理解成一个超级大的后台app,他里面有无数个Service实现着不同的模块,但是他们的模式都是类似的,了解框架的套路后,学习框架和看一个app代码是类似的,都是在学习业务逻辑代码,只是框架的业务逻辑就是对手机上次系统管理的逻辑。
由于AMS的逻辑太多,所以很多Activity和Task操作逻辑被提出来,放在ATMS里(ActivityTaskManagerService),我们会统一在这一章介绍,不会将他们区分成两个服务。
本章涉及内容
- Activity启动流程
- 启动app进程
- app生命周期状态流程
- 应用发送广播流程
- 广播的分发流程
- bindeService流程