[置顶] Android基本框架学习之defaultServiceManager

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管理(注册/注销/查询)!


[置顶] Android基本框架学习之defaultServiceManager_第1张图片


例子:

所有用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

你可能感兴趣的:(java,linux,android,框架,manager,service)