日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
Android中深入研究Service

1 Service本質結構

我們還是從Service的根本意義分析入手,服務的本質就是響應客戶端請求。要提供服務,就必須建立接收請求,處理請求,應答客服端的框架。我想在Android Service設計者也會無時不刻把這個服務本質框圖掛在腦海中。從程序的角度,服務一定要存在一個閉合循環(huán)框架和請求處理框架。

分析清楚服務框就必須弄清楚以下的機制及其構成。

(1)閉合循環(huán)結構放置在哪里?

(2)處理請求是如何分發(fā)和管理?

(3)處理框架是如何建立的?

(4)概念框架是如何建立的?

2 Service基本框架分析

Android設計中,Native Service和Android Service采用了同一個閉合循環(huán)框架。這個閉合循環(huán)框架放置在Native的C++空間中。

在服務框架中,ProcessState是公用的部分,這個公用部分最主要的框架就是閉合循環(huán)框架和接收到從Binder來的請求后的處理框架。我們將服務框架用ProcessSate來表示,簡言之:

(1) addservice

(2) 建立閉合循環(huán)處理框架。

java代碼:

 
 
 
 
  1. int main(int argc, char** argv){
  2. sp proc(ProcessState::self());
  3. addService(String16("xxx0"), new xxx0Service());
  4. addService(String16("xxx1"), new xxx1Service());
  5. ProcessState::self()->startThreadPool();
  6. IPCThreadState::self()->joinThreadPool();//閉合循環(huán)框架
  7. }

2.1 Native Service

 Native Service是在系統(tǒng)Init階段通過Init.rc腳本建立的服務。

java代碼:

 
 
 
 
  1. int main(int argc, char** argv){
  2. sp proc(ProcessState::self());
  3. sp sm = defaultServiceManager();
  4. LOGI("ServiceManager: %p", sm.get());
  5. AudioFlinger::instantiate();
  6. MediaPlayerService::instantiate();
  7. CameraService::instantiate();
  8. AudioPolicyService::instantiate();
  9. ProcessState::self()->startThreadPool();
  10. IPCThreadState::self()->joinThreadPool();
  11. }

(1)服務進程建立了ProcessState對象,并將給對象登記在進程的上下文中。

(2)建立一個新AudioFlinger對象,并將對象登記Service Manager Service中。

(3)開始就收請求,處理請求,應答這個循環(huán)閉合框架。

2.2 Android Service

Androids service是系統(tǒng)二階段(Init2)初始化時建立的服務。

在SystemServer.java中看不到循環(huán)結構,只是可以看到建立了init2的實現函數,建立了一大堆服務,并AddService到service Manager。

Init1()是在Native空間實現的(com_andoird_server_systemServer.cpp)。我們一看這個函數就知道了,原來這個閉合循環(huán)處理框架在這里:

init1->system_init() @System_init.cpp

在system_init()我們看到了這個久違的循環(huán)閉合管理框架。

java代碼:

 
 
 
 
  1. {
  2. Call "com/android/server/SystemServer", "init2"
  3. ProcessState::self()->startThreadPool();
  4. IPCThreadState::self()->joinThreadPool();
  5. }

新聞名稱:Android中深入研究Service
文章轉載:http://www.dlmjj.cn/article/cogsgis.html