Android -- getSystemService

說明                                                                                   

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,事件發生時都收到回調

新建一個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 啓動服務

 

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

相關文章
相關標籤/搜索