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

更多相关文章

  1. Fix one bug in Android(安卓)官方提供的例子
  2. Android高手进阶教程(十七)之---Android中Intent传递对象的两种
  3. Android(安卓)Parcelable接口
  4. Android(安卓)开源的真相: 无法fork
  5. Android(安卓)MediaPlayer的核心原理
  6. Android(安卓)内容提供器---创建内容提供器(元素)
  7. android eclipse 真机调试
  8. Android系统构架简介
  9. Android系统框架

随机推荐

  1. LinearLayout中组件右对齐
  2. AOSP源码编译 --全部编译
  3. Android(安卓)手势识别--GestureDetector
  4. Android常用组件(View学习之一)
  5. android中-使用2D动画 — 图形处理(Canva
  6. 【Android多线程】线程二三事
  7. Android多国语言-国家代码清单
  8. Android(安卓)Activity生命周期(Android艺
  9. Android(安卓)属性动画(一)
  10. 屏蔽android的menu键,使menu键不能用,自定