Android的後臺運行在不少service,它們在系統啓動時被SystemServer開啓,支持系統的正常工做,好比MountService監聽是否有SD卡安裝及移除,ClipboardService提供剪切板功能,PackageManagerService提供軟件包的安裝移除及查看等等,應用程序能夠經過系統提供的Manager接口來訪問這些Service提供的數據。html
以android系統支持sensor(傳感器)實例來講明框架層的service和manager是如何配合工做的java
1) 什麼是sensorandroid
sensor是傳感器, 好比控制橫豎屏切換利用的就是重力傳感器(gsensor), 還有accelerator sensor可取得x, y, z三個軸上的加速度(應用如平衡球, 小猴吃香蕉等)網絡
2) 應用程序調用(如下爲關鍵代碼)app
sensorManager=(SensorManager)getSystemService(context.SENSOR_SERVICE); lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); sensorManager.registerListener(sensorListener, lightSensor, SensorManager.SENSOR_DELAY_NORMAL);
3) Manager層框架
a) 提供給應用程序調用的接口,同實與Service交互,實現功能spa
frameworks/base/core/java/android/hardware/SensorManager.javacode
4) Service層server
a) 開機時就運行的管理Sensor的後臺服務xml
frameworks/base/services/java/com/android/server/SensorService.java
b) sensor後臺服務須要的JNI,經過它與系統級交互
frameworks/base/services/jni/com_android_server_SensorService.cpp
5) 系統層
a) 傳感器的頭文件,硬件提供商按此文件的定義實現其功能
hardware/libhardware/include/hardware/sensors.h
b) 傳感器的系統層實現,與內核交互,此處一般是硬件提供商提供的
hareware/libsensors
6) 內核及硬件層
內核訪問硬件,同時以設備文件等方式提供給上層控制接口和傳感器數據
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) 內核支持
1) 查看系統提供哪些服務
find frameworks/base/core/java/android/ -name *Manager.java
此處能夠看到調用系統提供服務的入口
2) 通常register listener,事件發生時都收到回調
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 啓動服務
getSystemService是Android很重要的一個API,它是Activity的一個方法,根據傳入的NAME來取得對應的Object,而後轉換成相應的服務對象。如下介紹系統相應的服務。
傳入的Name |
返回的對象 |
說明 |
WINDOW_SERVICE |
WindowManager |
管理打開的窗口程序 |
LAYOUT_INFLATER_SERVICE |
LayoutInflater |
取得xml裏定義的view |
ACTIVITY_SERVICE |
ActivityManager |
管理應用程序的系統狀態 |
POWER_SERVICE |
PowerManger |
電源的服務 |
ALARM_SERVICE |
AlarmManager |
鬧鐘的服務 |
NOTIFICATION_SERVICE |
NotificationManager |
狀態欄的服務 |
KEYGUARD_SERVICE |
KeyguardManager |
鍵盤鎖的服務 |
LOCATION_SERVICE |
LocationManager |
位置的服務,如GPS |
SEARCH_SERVICE |
SearchManager |
搜索的服務 |
VIBRATOR_SERVICE |
Vibrator |
手機震動的服務 |
CONNECTIVITY_SERVICE |
Connectivity |
網絡鏈接的服務 |
WIFI_SERVICE |
WifiManager |
Wi-Fi服務 |
TELEPHONY_SERVICE |
TeleponyManager |
電話服務 |
參考:http://blog.sina.com.cn/s/blog_7cb2c5d50101c26t.html