android (六)、Service工作原理
android作業系統支援後臺服務,android應用程式和系統中大多都可以看到服務的影子。
一、android的服務分為兩大部分:android應用服務和android系統服務。
二、android應用服務分為本地服務和遠端服務;
三、android系統服務分為java服務和本地服務(c++編寫);
四、java服務又分為核心平臺服務和硬體服務。
android應用程式中最常用的是Serice,Service本身是個抽象類並沒有什麼功能實現,它只是是一個執行在主執行緒中的一個驅殼,所以如果要使用Service做耗時操作的話還是需要配合執行緒使用的。
官方推薦了一個用來做耗時任務的Service,它叫
應用程式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層。