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

更多相关文章

  1. 【Android】windows系统上安装与使用Android NDK r5
  2. Android系统源码阅读(10):Android 应用程序的消息处理机制
  3. Android 7.0系统启动流程分析
  4. Android面试之----Android系统架构图及简单的系统架构介绍
  5. Android Framework 框架系列之 PhoneWindowManager
  6. Android Parcelable接口
  7. Android弹幕实现:基于B站弹幕开源系统(5)-抽象和复用

随机推荐

  1. Android位图操作
  2. Android反编工具的使用-Android(安卓)Kil
  3. android 基础
  4. android设备常用的adb命令
  5. Android(安卓)中,应用程序需要的图片资源
  6. 浅析Android(安卓)Activity的启动过程
  7. CM android的CMUpdater分析(二)
  8. android zbar二维码扫描(中文不乱码)
  9. Android系统集成有源码的第三方库和程序
  10. android 代码设置EditText的hint字符