[置顶] 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管理(注册/注销/查询)!
例子:
所有用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
更多相关文章
- Fix one bug in Android(安卓)官方提供的例子
- Android高手进阶教程(十七)之---Android中Intent传递对象的两种
- Android(安卓)Parcelable接口
- Android(安卓)开源的真相: 无法fork
- Android(安卓)MediaPlayer的核心原理
- Android(安卓)内容提供器---创建内容提供器(元素)
- android eclipse 真机调试
- Android系统构架简介
- Android系统框架