目录
4.1 SystemServer main方法里面主要做了几件事情
1)创建SystemServiceManager管理所有的服务
一,SystemServer整体框架
1.1,SystemServer类图

1.1,SystemServer时序图

二,SystemServer启动源码分析
2.1,重要的概念
在开始讲解源码之前,需要搞清楚几个重要的概念
| 对象 | 含义 | 备注 |
| SystemServer | SystemServer是一个进程,这个进程是Android系统中的核心进程,该进程由zygote进程在开机时fork而出,管理了系统的核心服务,整个安卓系统只有一个SystemServer进程 | 属于进程级别 是一个单独的进程 |
| SystemServiceManager | SystemServiceManager是为了管理SystemServer进程里面运行的90+多个服务(Services)设置的一个管理者角色,这个仅仅用于同一个进程之间使用 | 普通的java对象 |
| LocalServices | LocalServices是Android系统中用于在同一进程中注册和获取LocalService的工具类。它维护了一个ArrayMap来存储不同类型的LocalService实例,确保每个类型只对应一个实例。通过addService()方法注册服务,getService()方法获取服务。这些服务不是Binder对象,仅限于同一进程内通信,类似于ServiceManager但更私有化,和ServiceManager最本质的区别是ServiceManager管理的服务都是binder服务,这些服务都是可以在不同进程之间跑的对象 | 管理的是普通的服务,只能在同一个进程之间使用的服务,不具备进程之间通信能力的服务,各个系统service在启动的过程中都会调用LocalServices.addService()把自己的local service注册到LocalServices中,比如AMS,WMS,PMS 普通的java对象 |
| SystemServiceRegistry |
SystemServiceRegistry可以方便获取 |
比如ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); 最终是调用到ServiceManager获取对应服务的Ibinder对象 ,普通的java对象 |
| SystemService | 为了统一管理SystemServer进程运行的所有服务提供的一个统一接口对象 | 普通的java对象 |
| ServiceManager | ServiceManager android系统的服务守护进程,管理了整个android系统的所有Ibinder对象 | 是一个单独的进程,和Zygote平级,都是由Init进程fork出来的 |
上面说了这么多,一图胜千言,下面看具体的

2.2,启动入口
frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
的main方法里面
if (startSystemServer) {
Runnable r = forkSystemServer(abiList, socketName, zygoteServer);
// {@code r == null} in the parent (zygote) process, and {@code r != null} in the
// child (system_server) process.
if (r != null) {
r.run();
return;
}
}
fork出来,之所以后面可以通过java反射的方式调用到SystemServer,是因为在fork之前传递的参数重明确的说明了对象com.android.server.SystemServer,通知指定了运行所在的进程是在--nice-name=system_server
private static Runnable forkSystemServer(String abiList, String socketName,
ZygoteServer zygoteServer) {
....................................................................................
String args[] = {
"--setuid=1000",
"--setgid=1000",
"--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1021,1023,1032,3001,3002,3003,3006,3007,3009,3010",
"--capabilities=" + capabilities + "," + capabilities,
"--nice-name=system_server",
"--runtime-args",
"com.android.server.SystemServer",
};
....................................................................................
最后通过反射的方

最低0.47元/天 解锁文章
1761

被折叠的 条评论
为什么被折叠?



