它管理了系统的四大组件:Activity、Service、ContentProvider、Broadcast。
 它除了管理四大组件外,同时也负责管理和调度所有的进程
 AMS相关目录结构
 AMS代码主要在下面几个目录(AndroidQ上AMS相关部分功能移到了wm下):
 frameworks/base/core/java/android/app/
 frameworks/base/services/core/java/com/android/server/am/
 frameworks/base/services/core/java/com/android/server/wm/
下面具体看下几个重要文件
 frameworks/base/core/java/android/app/下:
Activity.java:所有Activity的父类。
 ActivityManager.java:AMS的客户端,提供给用户可调用的api。
 ActivityThread.java:应用进程的主线程类,一般即UI线程。
 frameworks/base/services/core/java/com/android/server/am/下:
ActiveServices.java:控制service的启动、重启等。
 ProcessRecord.java:记录每个进程的信息。
 frameworks/base/services/core/java/com/android/server/wm/下:
ActivityRecord.java:activity对象信息的记录。
 ActivityStack.java/ActivityStackSupervisor.java:管理activity生命周期及堆栈等。
 TaskRecord.java:任务栈记录,管理一个任务的应用activity
 ActivityTaskManagerService.java/ActivityTaskManagerInternal.java:管理activity的启动和调度。

 为什么需要使用 ActivityManagerProxy 的代理模式呢 ,AMS 是在system_server
 进程中的,其他进程要使用AMS就要在本进程中建立一个代理,同时他们之间又是通过binder通讯的,binder通讯本身采用的就是代理模式。
 1.1 而在Android10.0中 有个ATMS的启动
ActivityTaskManagerService是Android 10新引入的变化,也是系统服务,用来管理Activity启动和调度,包括其容器(task、stacks、displays等)。
 Android 10将原先AMS中对activity的管理和调度移到了ActivityTaskManagerService中,位置放到了wm下(见上面完整路径),因此AMS负责四大组件中另外3个(service, broadcast, contentprovider)的管理和调度。
 首先看下
 mSystemServiceManager.startService(
 ActivityTaskManagerService.Lifecycle.class)这行代码,
 是调用了系统服务管理器SystemServiceManager的startService方法,在此以启动ATMS为例说明:
 源码位置/frameworks/base/services/core/java/com/android/server/SystemServiceManager.java





![Could not install packages due to an EnvironmentError: [WinError 5]](https://img-blog.csdnimg.cn/direct/df413fc3bbea46f7962bc7fe31fa6a01.png)

![[Windows CMD] 检测网络连通性 ping](https://i-blog.csdnimg.cn/direct/a54395bd6b03431bb30873d3466fbe47.png)











