Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android系統service詳解

Android系統service詳解

編輯:Android開發教程

Android存在3大類service, 處於android系統的不同框架層,具體解讀如下:

1) init.rc中的service
//關鍵詞“service"  name  二進制可執行程序路徑

service servicemanager /system/bin/servicemanager

class core

user system

group system

critical

onrestart restart healthd

onrestart restart zygote

onrestart restart media

onrestart restartsurfaceflinger

onrestart restart drm

其實這類service就是為了定義開啟啟動的程序,該類service的對象是一個可以執行的binary程序。把它定義為一種service是為了更好的描述該binary運行的屬性,比如運行用戶,組,啟動一次(oneshot)還是不停啟動(程序死掉後會再次啟動)。更重要的是它還能描述各個程序之間的關系。比如onrestart restart drm,這個描述的意思是當drm程序重啟時,該程序也要主動重啟。

同時通過如下命令還可以運行時動態啟動或者關閉某一service,當然要有root權限

property_set("ctl.start", "servicemanager");property_set("ctl.stop", "servicemanager");

adb shell setprop ctl.start servicemanager;adb shell setprop ctl.stop servicemanager

2) 系統層service

返回欄目頁:http://www.bianceng.cn/OS/extra/

該類service和我們通常理解的service很接近,就是系統中提供服務的,該類service定義出服務接口,其他模塊通過該接口即能使用該服務。該類服務的執行體可以是二進制代碼,也可以是java代碼。比如:

c++類型的service:

SurfaceFlinger,CameraManagerService, MediaPlayerService

java類型的service:

   ActivityManagerService,WindowManagerService,NetworkManagerService

實現機制是該類service向上面提到的servicemanager注冊它的服務,其他模塊通過名字從servicemanager拿到service的接口。在shell通過命令 "service list"能列出系統中所有的該類service。

c++類型service相關接口:

sp<IServiceManager> sm = defaultServiceManager();  
sm.addService(name, xx)/sm.getService(name)

java類型service相關接口:

ServiceManager.getService(name)/addService(name,xx)
3) SDK層的service

不像前面兩類service,他們是一類對象的總稱,而該類service是開發者經常接觸的一個很具體的java類android.app.Service.java。它是android sdk暴露給第三方應用使用的。 它是和Activity對等的,是android 四大組件之一(Activity,Service, Provider, BroadcastReceiver)。

總結:

第一類service:  系統集成工程師負責

第二類service:  framework系統工程師負責

第三類service:芸芸眾生的android應用程序開發者每日親密接觸

作者:csdn博客 ITleaks

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved