android系统自带的Service原理与使用
1. 說明
android的后臺運(yùn)行在很多service,它們在系統(tǒng)啟動時(shí)被SystemServer開啟,支持系統(tǒng)的正常工作,比如 MountService監(jiān)聽是否有SD卡安裝及移除,ClipboardService提供剪切板功能,PackageManagerService提 供軟件包的安裝移除及查看等等,應(yīng)用程序可以通過系統(tǒng)提供的Manager接口來訪問這些Service提供的數(shù)據(jù),以下將說明他們的工具流程
2. 舉例說明基本流程
以android系統(tǒng)支持sensor(傳感器)實(shí)例來說明框架層的service和manager是如何配合工作的
1) 什么是sensor
sensor是傳感器, 比如控制橫豎屏切換利用的就是重力傳感器(gsensor), 還有accelerator sensor可取得x, y, z三個(gè)軸上的加速度(應(yīng)用如平衡球, 小猴吃香蕉等)
2) 應(yīng)用程序調(diào)用(以下為關(guān)鍵代碼)
sensorManager=(SensorManager)getSystemService(context.SENSOR_SERVICE);
lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
sensorManager.registerListener(sensorListener, lightSensor, SensorManager.SENSOR_DELAY_NORMAL);
3) Manager層
a) 提供給應(yīng)用程序調(diào)用的接口,同實(shí)與Service交互,實(shí)現(xiàn)功能
frameworks/base/core/java/android/hardware/SensorManager.java
4) Service層
a) 開機(jī)時(shí)就運(yùn)行的管理Sensor的后臺服務(wù)
frameworks/base/services/java/com/android/server/SensorService.java
b) snesor后臺服務(wù)需要的JNI,通過它與系統(tǒng)級交互
frameworks/base/services/jni/com_android_server_SensorService.cpp
5) 系統(tǒng)層
a) 傳感器的頭文件,硬件提供商按此文件的定義實(shí)現(xiàn)其功能
hardware/libhardware/include/hardware/sensors.h
b) 傳感器的系統(tǒng)層實(shí)現(xiàn),與內(nèi)核交互,此處通常是硬件提供商提供的
hareware/libsensors
6) 內(nèi)核及硬件層
內(nèi)核訪問硬件,同時(shí)以設(shè)備文件等方式提供給上層控制接口和傳感器數(shù)據(jù)
3. 系統(tǒng)層實(shí)現(xiàn)
1) frameworks/base/core/java/android/*Manager.java 對應(yīng)用的接口
2) frameworks/base/core/jni/ 對應(yīng)用的接口的JNI
3) frameworks/base/services/java/com/android/server/ 后臺服務(wù)
?
4) frameworks/base/services/jni/ JNI與系統(tǒng)層接口
5) hardware/libhardware/include/ 系統(tǒng)層頭文件
6) hardware/libxxx 系統(tǒng)庫支持
7) 內(nèi)核支持
4. 應(yīng)用程序如何使用
1) 查看系統(tǒng)提供哪些服務(wù)
find frameworks/base/core/java/android/ -name *Manager.java
此處可以看到調(diào)用系統(tǒng)提供服務(wù)的入口
2) 一般register listener,事件發(fā)生時(shí)都收到回調(diào)
5. 新建一個(gè)service(以froyo為例)
1) 接口:接口供應(yīng)用調(diào)用
frameworks/base/core/java/android/app/ContextImpl.java 加服務(wù)名與Manager對應(yīng)
frameworks/base/core/java/android/content/Context.java 加服務(wù)名定義
2) Manager:提供服務(wù)對應(yīng)的調(diào)用接口
frameworks/base/core/java/android/app/StartXXXXManager.java 實(shí)現(xiàn)調(diào)用接口
frameworks/base/core/java/android/app/IXXXXManager.aidl 定義調(diào)用接口
frameworks/base/Android.mk 加入aidl的編譯
3) service:提供后臺服務(wù)支持
frameworks/base/services/java/com/android/server/XXXXService.java 服務(wù)實(shí)現(xiàn)
frameworks/base/services/java/com/android/server/SystemServer.java 啟動服務(wù)
?
http://yueguc.iteye.com/blog/775339
轉(zhuǎn)載于:https://www.cnblogs.com/daishuguang/p/3858186.html
總結(jié)
以上是生活随笔為你收集整理的android系统自带的Service原理与使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: swift 运算符和控制流程
- 下一篇: SQL SERVER 自带系统存储过程分