现在的位置: 首页 > 综合 > 正文

android系统自带的Service原理与使用

2013年02月12日 ⁄ 综合 ⁄ 共 2464字 ⁄ 字号 评论关闭

1.     说明
android
的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如MountService监听是否有SD卡安装及移除,ClipboardService提供剪切板功能,PackageManagerService提供软件包的安装移除及查看等等,应用程序可以通过系统提供的Manager接口来访问这些Service提供的数据,以下将说明他们的工具流程

2.     举例说明基本流程
android系统支持sensor(传感器)实例来说明框架层的servicemanager是如何配合工作的

1)         什么是sensor
sensor
是传感器比如控制横竖屏切换利用的就是重力传感器(gsensor), 还有accelerator sensor可取得x, y, z三个轴上的加速度(应用如平衡球小猴吃香蕉等)

2)         应用程序调用(以下为关键代码)
sensorManager=(SensorManager)getSystemService(context.SENSOR_SERVICE);
lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
sensorManager.registerListener(sensorListener, lightSensor, SensorManager.SENSOR_DELAY_NORMAL);

3)         Manager

a)          提供给应用程序调用的接口,同实与Service交互,实现功能
frameworks/base/core/java/android/hardware/SensorManager.java

4)         Service

a)          开机时就运行的管理Sensor的后台服务
frameworks/base/services/java/com/android/server/SensorService.java

b)         snesor后台服务需要的JNI,通过它与系统级交互
frameworks/base/services/jni/com_android_server_SensorService.cpp

5)         系统层

a)          传感器的头文件,硬件提供商按此文件的定义实现其功能
hardware/libhardware/include/hardware/sensors.h

b)         传感器的系统层实现,与内核交互,此处通常是硬件提供商提供的
hareware/libsensors

6)         内核及硬件层
内核访问硬件,同时以设备文件等方式提供给上层控制接口和传感器数据

3.     系统层实现

1)         frameworks/base/core/java/android/*Manager.java     对应用的接口

2)         frameworks/base/core/jni/                                                     对应用的接口的JNI

3)         frameworks/base/services/java/com/android/server/    后台服务

4)         frameworks/base/services/jni/                                                        JNI与系统层接口

5)         hardware/libhardware/include/                                              系统层头文件

6)         hardware/libxxx                                                                     系统库支持

7)         内核支持

4.     应用程序如何使用

1)         查看系统提供哪些服务
find frameworks/base/core/java/android/ -name *Manager.java
此处可以看到调用系统提供服务的入口

2)         一般register listener,事件发生时都收到回调

5.    新建一个service(以froyo为例)

1)         接口接口供应用调用
frameworks/base/core/java/android/app/ContextImpl.java  
加服务名与Manager对应
frameworks/base/core/java/android/content/Context.java    
加服务名定义

2)         Manager提供服务对应的调用接口
frameworks/base/core/java/android/app/StartXXXXManager.java        
实现调用接口
frameworks/base/core/java/android/app/IXXXXManager.aidl      
定义调用接口
frameworks/base/Android.mk         
加入aidl的编译

3)         service提供后台服务支持
frameworks/base/services/java/com/android/server/XXXXService.java 
服务实现
frameworks/base/services/java/com/android/server/SystemServer.java   
启动服务

抱歉!评论已关闭.