android系統自帶的Service原理與使用

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   
啓動服務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章