溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Android Service基本框架怎么用

發(fā)布時(shí)間:2022-01-12 17:59:04 來(lái)源:億速云 閱讀:222 作者:iii 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容主要講解“Android Service基本框架怎么用”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Android Service基本框架怎么用”吧!

Service深入分析

Android體系架構(gòu)中三種意義上服務(wù):

  •  Native服務(wù)

  •  Android服務(wù)

  •  Init空間的服務(wù),主要是屬性設(shè)置,這個(gè)IPC是利用Socket來(lái)完成的,這個(gè)我將在另外一章來(lái)討論。

Navite服務(wù),實(shí)際上就是指完全在C++空間完成的服務(wù),主要是指系統(tǒng)一開(kāi)始初始化,通過(guò)Init.rc腳本起來(lái)的服務(wù),例如Service Manger service,Zygote service,Media service , ril_demon service等。

Android服務(wù)是指在JVM空間完成的服務(wù),雖然也要使用Navite上的框架,但是服務(wù)主體存在于Android空間。Android是二階段初始(Init2)初始化時(shí)建立的服務(wù)。

1 Service本質(zhì)結(jié)構(gòu)

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

分析清楚服務(wù)框就必須弄清楚以下的機(jī)制及其構(gòu)成。

(1)閉合循環(huán)結(jié)構(gòu)放置在哪里?

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

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

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

2 Service基本框架分析

     Android設(shè)計(jì)中,Native Service和Android Service采用了同一個(gè)閉合循環(huán)框架。這個(gè)閉合循環(huán)框架放置在Native的C++空間中,,ProcessState@ProcessState.cpp 和IPCThreadState@IPCThreadState.cpp兩個(gè)類(lèi)完成了全部工作。

Android Service基本框架怎么用

ProcessState放置在全局變量gProcess中,每個(gè)進(jìn)程只有一個(gè)ProcessState對(duì)象,負(fù)責(zé)打開(kāi)Binder設(shè)備驅(qū)動(dòng),建立線(xiàn)程池等。而IPCThreadState每個(gè)線(xiàn)程有一個(gè),IPCThreadState實(shí)例登記在Linux線(xiàn)程程的上下文附屬數(shù)據(jù)中,主要負(fù)責(zé)Binder數(shù)據(jù)讀取,寫(xiě)入和請(qǐng)求處理框架。IPCThreadSate在構(gòu)造的時(shí)候,獲取進(jìn)程的ProcessSate并記錄在自己的成員變量mProcess中,通過(guò)mProcess可以獲取到Binder的句柄。

3.1 ProcessState的生命周期

      既然ProcessState是Binder通訊的基礎(chǔ),那么Process必須在Binder通訊之前建立。客戶(hù)端,服務(wù)端都必須建立。由于現(xiàn)在重點(diǎn)討論服務(wù)端,所以重心放置在服務(wù)端。在Android體系中有c++空間的服務(wù),JVM空間的服務(wù),這兩類(lèi)服務(wù)在本質(zhì)上相同的,只是形式上不同,由于他們都是建立在ProcessState這個(gè)基礎(chǔ)上,所以在形式上不同就僅僅表現(xiàn)在對(duì)OnTransact的回調(diào)處理的不同。

Native Service 

我們直接可以看到使用sp<ProcessState> proc(ProcessState::self()),建立建立ProcessState,一旦調(diào)用ProcessState就建立了,并且這個(gè)self將ProcessSate登記在全局變量中。

Android Service

建立Android Service服務(wù)system_init @System_init.cpp中我們可以看到相同的結(jié)構(gòu)。有一點(diǎn)不同的是所有的Android Service都運(yùn)行在一個(gè)進(jìn)程中:systemsever進(jìn)程。

3.2 Binder Driver包裝 @IPCThreadState

      ProcessSate構(gòu)造的時(shí)候,使用open_binder打開(kāi)/driver/binder,并將句柄記錄在mDriverFD,在ProcessState中并不使用這個(gè)句柄,真正使用這個(gè)Binder設(shè)備句柄的是IPCThreadState,所有關(guān)于Binder的操作放置在IPCThreadState中:

(1)讀取/寫(xiě)入:talkWithDriver()@IPCThreadState對(duì)ioctl(mProcess->mDriverFD, BINDER_WRITE_READ, &bwr)進(jìn)行包裝。

(2)請(qǐng)求處理:executeCommand(...)@ IPCThreadState

(3)循環(huán)結(jié)構(gòu):joinThreadPool()

joinThreadPool()

{

While(1){

talkWithDriver(...)

...

executeCommand(...)

}

}

到此,相信大家對(duì)“Android Service基本框架怎么用”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI