海洋网站建设网络公司,西凤酒网站建设的基本情况,素材网站源码,网站建设实践心得体会目录 概述 重点和难点问题 启动方式 main入口#xff1a; run方法#xff1a; BootstrapSevices 小结#xff1a; 与其他线程的通信原理 参考文档#xff1a; 概述 AMS是Android系统主要负责四大组件的启动#xff0c;切换#xff0c;调度以及应用程序进程管理和调度等工… 目录 概述 重点和难点问题 启动方式 main入口 run方法 BootstrapSevices 小结 与其他线程的通信原理 参考文档 概述 AMS是Android系统主要负责四大组件的启动切换调度以及应用程序进程管理和调度等工作。 ATMS是系统服务管理Activities和其他容器task,stacks,display…… 主要依靠binder的方式进行跨进程通信。 重点和难点问题 启动方式 代码位置 frameworks/base/services/java/com/android/server/SystemServer.java frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java frameworks/base/services/core/java/com/android/server/SystemServiceManager.java 是由SystemServer启动的服务之一 main入口 /** * The main entry point from zygote. */ public static void main(String[] args) { new SystemServer().run(); } run方法 记录进程的启动信息 系统时间 后面再设置一下数据库的兼容性就开始进入SystemServer了 虚拟机的内存设置 bundle和线程的一些设置 然后就开始初始化本地service 创建上下文context 创建SystemServiceManager 添加系统服务并准备线程池来初始化并行任务 然后就开始start Service了 然后初始化虚拟机就进入Looper.loop()循环 BootstrapSevices 启动watchdog SystemServer初始化线程池 等待installd的启动完成以有机会有权限创建关键目录例如/data/user 需要先完成这个再初始化其他的服务。 在某些情况下启动一个app后我们需要访问设备标识符因此需要在ActivityManager之前注册设别标识符策略。 Uri Grants Manager. 接下来就是启动ActivityManager了 先启动 ATMS的服务再启动AMS的服务。Android10之前AMS是主要负责对四大组件进行管理和调度同时AMS也会对进程电池内存权限等进行管理。再Android10开始就把Activity的管理迁移到了ActivityTaskManagerService中ActivityTaskManagerService也被缩写为ATMS。 ATMS并不是直接启动而是SystemServiceManager通过 Lifecycle类来间接实现。 SystemServiceManager是一个辅助类它用于辅助SystemServer进程启动和管理SystemServer进程中的各类服务Service。 由于需要管理的服务非常多所以SystemServiceManager是通过管理所有实现了SystemService接口的类的方式来统一的运用反射启动这些服务。 Lifecycle 是 ATMS 里的静态内部类静态内部类不依赖于外部类它封装了ATMS对象同时实现了SystemService接口。Lifecycle 构造方法调用时会初始化内部成员变量 mService即调用ATMS的构造方法构造方法中会执行一些初始化操作。 .... 梳理一下ATMS的startService 首先startService()内部是运用了反射获取到了serviceClass类的对象实例service然后再调用startService(service)。就是说ATMS将自己的服务发布到ServiceManager上去方便其他进程调用ATMS服务。 然后调用Lifecycle中的onStart函数通过这个onStart函数将ATMS的本地服务保存到LocalServices列表中。 小结 AMSATMS启动流程 是SystemServer进程中的服务是在SystemServer进程启动的时候启动的服务他们启动的过程是由SystemServer通过SystemServiceManager对象进行统一管理ATMSAMS会将自己的binder发布到ServiceManger进程ATMSAMS会将自己的本地服务发布到LocalServices列表 与其他线程的通信原理 未完待续…… 参考 https://blog.51cto.com/u_16099299/6562938 https://article.juejin.cn/post/7250025436016492605 AOSPXRef