自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android中深入研究Service

移動(dòng)開發(fā) Android
關(guān)于Service,不管是Windows還是linux系統(tǒng),相信大家應(yīng)該遇到過很多自己解決不了的問題吧,那么本文來講述一下Android手機(jī)系統(tǒng)中的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代碼:

  1. int main(int argc, char** argv){  
  2. sp<ProcessState> 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)框架  

2.1 Native Service

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

java代碼:

  1. int main(int argc, char** argv){  
  2. sp<ProcessState> proc(ProcessState::self());  
  3. sp<IServiceManager> 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();  

(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代碼:

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

【編輯推薦】

Service Broker基礎(chǔ)應(yīng)用(上)

Service Broker基礎(chǔ)應(yīng)用(下)

淺述遠(yuǎn)程Service Broker的實(shí)現(xiàn)

Android開發(fā)之旅:Android架構(gòu)

Android應(yīng)用程序開發(fā)環(huán)境的搭建

責(zé)任編輯:zhaolei 來源: 移動(dòng)開發(fā)者
相關(guān)推薦

2011-12-15 10:43:20

JavaNIO

2013-01-07 13:38:56

Android開發(fā)布局長度單位

2022-05-11 09:03:05

CSS容器文本換行

2010-11-23 16:35:59

MySQL刪除多表數(shù)據(jù)

2018-12-24 15:00:58

混合云多云云采用

2010-11-18 17:24:27

Oracle旋轉(zhuǎn)ins

2024-03-17 19:14:28

2010-06-21 13:07:14

2022-04-19 08:28:34

main函數(shù)

2009-10-20 10:17:50

綜合布線系統(tǒng)驗(yàn)收

2017-06-06 11:29:23

Java異常研究與分析

2016-01-12 18:04:55

Java異常研究

2010-11-26 11:57:35

MySQL結(jié)果字符串

2010-05-31 17:45:50

MySQL行鎖

2009-12-08 18:45:17

PHP檢查函數(shù)可用

2023-11-03 08:25:28

數(shù)據(jù)結(jié)構(gòu)Java

2021-05-25 09:00:00

Kubernetes容器集群

2010-05-19 14:45:46

2009-11-11 13:49:02

路由器技術(shù)

2012-10-29 10:30:36

CSSWeb前端display
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號