Android基本框架学习之defaultServiceManager
这两天看了一下dumpsys和dumpstate,对Android系统中各种系统Service的实现框架不是很明白,以下简单的描述了一下这两天关于Android的系统Service的一些实现和具体代码位置。
Binder的一系列接口和后台驱动是信息交换的基础
service_manager是提供一个中转层/管理层给各个java端的service交换信息的通道,它起到承上(java层/dalvik)启下(binder驱动/硬件信息)的作用。
而Java层主要通过ServiceManager.java管理,并通过ServiceManagerNative.java提供的接口与binder下的IServiceManager.cpp交互,IServiceManager.cpp又通过Binder机制与service_manager交互达到从Java/dalvik到Linux进程中的各种Service管理(注册/注销/查询)!
所有用dumpsys能够看到的Service都是通过ServiceManger提供的add函数把各自提供的service提供统一的接口给ServiceManger管理,并通过Binder与相应的Component相交互.
有一些与硬件状态相关的service如,wifi,phone,就对应有一个如WifiService,在mydroid/frameworks/base/core/services/java/com/android/server/ConnectivityService.java中被注册到ServiceManger中.
mydroid/framework/base/libs/binder/xxxx,其中IServiceManager.cpp中是接收从Java的ServerManager发来的各种请求(addserver, checkserver,...),与Binder Driver通讯的模块.
mydroid/frameworks/base/core/java/android/os/ServiceManager.java和ServiceManagerNative.java
mydroid/frameworks/base/core/services/java/com/android/server/SystemServer.java(大部分的系统service都在这里被注册)
而mydroid/frameworks/base/cmds/servicemanager/service_mangaer.c是一个被init.rc中使用到的命令,用来在开机时启动service_manager这个类似daemon的东西。
有关Service Manager的一篇文章,针对Binder驱动和Service_manager的阐述,但是没有提到Java层的各种Service是如何通过Binder和Service_manager提供接口给用户层和Java层的Sysem使用。
http://my.unix-center.net/~Simon_fu/?p=875