Android中深入研究Service
1 Service本質(zhì)結(jié)構(gòu)
我們還是從Service的根本意義分析入手,服務(wù)的本質(zhì)就是響應(yīng)客戶端請求。要提供服務(wù),就必須建立接收請求,處理請求,應(yīng)答客服端的框架。我想在Android Service設(shè)計(jì)者也會(huì)無時(shí)不刻把這個(gè)服務(wù)本質(zhì)框圖掛在腦海中。從程序的角度,服務(wù)一定要存在一個(gè)閉合循環(huán)框架和請求處理框架。
分析清楚服務(wù)框就必須弄清楚以下的機(jī)制及其構(gòu)成。
(1)閉合循環(huán)結(jié)構(gòu)放置在哪里?
(2)處理請求是如何分發(fā)和管理?
(3)處理框架是如何建立的?
(4)概念框架是如何建立的?
2 Service基本框架分析
Android設(shè)計(jì)中,Native Service和Android Service采用了同一個(gè)閉合循環(huán)框架。這個(gè)閉合循環(huán)框架放置在Native的C++空間中。
在服務(wù)框架中,ProcessState是公用的部分,這個(gè)公用部分最主要的框架就是閉合循環(huán)框架和接收到從Binder來的請求后的處理框架。我們將服務(wù)框架用ProcessSate來表示,簡言之:
(1) addservice
(2) 建立閉合循環(huán)處理框架。
java代碼:
- int main(int argc, char** argv){
- sp<ProcessState> proc(ProcessState::self());
- addService(String16("xxx0"), new xxx0Service());
- addService(String16("xxx1"), new xxx1Service());
- ProcessState::self()->startThreadPool();
- IPCThreadState::self()->joinThreadPool();//閉合循環(huán)框架
- }
2.1 Native Service
Native Service是在系統(tǒng)Init階段通過Init.rc腳本建立的服務(wù)。
java代碼:
- int main(int argc, char** argv){
- sp<ProcessState> proc(ProcessState::self());
- sp<IServiceManager> sm = defaultServiceManager();
- LOGI("ServiceManager: %p", sm.get());
- AudioFlinger::instantiate();
- MediaPlayerService::instantiate();
- CameraService::instantiate();
- AudioPolicyService::instantiate();
- ProcessState::self()->startThreadPool();
- IPCThreadState::self()->joinThreadPool();
- }
(1)服務(wù)進(jìn)程建立了ProcessState對象,并將給對象登記在進(jìn)程的上下文中。
(2)建立一個(gè)新AudioFlinger對象,并將對象登記Service Manager Service中。
(3)開始就收請求,處理請求,應(yīng)答這個(gè)循環(huán)閉合框架。
2.2 Android Service
Androids service是系統(tǒng)二階段(Init2)初始化時(shí)建立的服務(wù)。
在SystemServer.java中看不到循環(huán)結(jié)構(gòu),只是可以看到建立了init2的實(shí)現(xiàn)函數(shù),建立了一大堆服務(wù),并AddService到service Manager。
Init1()是在Native空間實(shí)現(xiàn)的(com_andoird_server_systemServer.cpp)。我們一看這個(gè)函數(shù)就知道了,原來這個(gè)閉合循環(huán)處理框架在這里:
init1->system_init() @System_init.cpp
在system_init()我們看到了這個(gè)久違的循環(huán)閉合管理框架。
java代碼:
- {
- Call "com/android/server/SystemServer", "init2"
- ProcessState::self()->startThreadPool();
- IPCThreadState::self()->joinThreadPool();
- }
【編輯推薦】
Service Broker基礎(chǔ)應(yīng)用(上)
Service Broker基礎(chǔ)應(yīng)用(下)
淺述遠(yuǎn)程Service Broker的實(shí)現(xiàn)