1. 程式人生 > >android (六)、Service工作原理

android (六)、Service工作原理

android作業系統支援後臺服務,android應用程式和系統中大多都可以看到服務的影子。

一、android的服務分為兩大部分:android應用服務和android系統服務。

二、android應用服務分為本地服務和遠端服務;

三、android系統服務分為java服務和本地服務(c++編寫);

四、java服務又分為核心平臺服務和硬體服務。

android應用程式中最常用的是Serice,Service本身是個抽象類並沒有什麼功能實現,它只是是一個執行在主執行緒中的一個驅殼,所以如果要使用Service做耗時操作的話還是需要配合執行緒使用的。

官方推薦了一個用來做耗時任務的Service,它叫

IntentService ,它擁有可以做任務的獨立的執行緒。

應用程式Service的新增過程大致是這樣的:

1、客戶端呼叫Context.startService()或Context.bindService ();

2、Context的實現類ContextImpl開始準備新增服務,此時ContextImpl開始呼叫ActivityManagerService請求建立Service。

3、當ActivityManagerService收到資訊後,資訊轉由ActivityService而後到ActivityThread;

4、ActivityThread此時建立Service例項並執行onCreate,然後開始執行服務。

本地Service和Activity的執行環境並沒有太大差異,在同一個執行緒中(一般指UI執行緒)。

應用程式中的Service分本地service和遠端Service:

1、本地service即和應用程式在同一個程序中,程序id(pid)相同。

2、遠端service和應用程式不在同一個程序中,程序id(pid)不同;因為不在同一程序中,那麼如果要交換資料或者通訊就要用到Binder進行程序間通訊。有需要的話可以瞭解下何為程序。

大多數應用程式都是單程序的,但有的時候為了某些目的,可能會分為多個程序;比如說你不想你的應用被無故kill掉,你可能會做一個遠端的service(守護程序),一直監聽著應用程式程序,在發現應用程序kill掉時重啟應用程式;通常兩者是互相監聽,互相守護。

系統服務:系統服務為作業系統提供最核心最基本的功能、服務和系統管理。

例如:ActivityMangerService、WindowManagerService、PackagerManger、Audio Flinger和Surface Flinger。

ActivityMangerService、WindowManagerService、PackagerManger在framework層,Audio Flinger和Surface Flinger在library層;

系統服務中的本地服務用c++編寫,執行在library層;java服務執行在framework層。