Framework中的AIDL(原)
?? ? ? 在上一節(jié)(應(yīng)用層的AIDL調(diào)用)中我們介紹了應(yīng)用層中的AIDL用法, 這一節(jié)中,我們來(lái)看一下系統(tǒng)Framework層中更為普通的AIDL用法。
? ? ? ? 為了便于分析,我們挑選了ITelephonyRegistry這個(gè)SystemService進(jìn)行分析。這個(gè)服務(wù)的主要作用就是對(duì)通話相關(guān)的事件進(jìn)行監(jiān)聽(tīng),我們把重心放在AIDL的實(shí)現(xiàn)結(jié)構(gòu)上,不去關(guān)注ITelephonyRegistry具體的實(shí)現(xiàn)。
一、AIDL文件相關(guān)
? ? ? ? 先來(lái)看一下這個(gè)服務(wù)的AIDL文件:
[java]?view plaincopy[java]?view plaincopy
? ? ? ? 上面的兩個(gè)文件是這個(gè)服務(wù)的核心部分,aidl文件規(guī)定了這個(gè)服務(wù)的功能,而java文件是對(duì)功能的具體實(shí)現(xiàn)。但是,此時(shí)的TelephonyRegistry并沒(méi)有繼承Service的類(lèi),也就是說(shuō),當(dāng)前他并不具備作為一個(gè)Service的資格。那么他是如何變成一個(gè)服務(wù)的呢?
二、服務(wù)的注冊(cè)過(guò)程
? ? ? ? 我們?cè)赟ystemService中找到了答案。 [java]?view plaincopy? ? ? ? 有了這一步,TelephonyRegistry就可以作為服務(wù)提供者向客戶(hù)端開(kāi)放了。也就是說(shuō),有了這一步,TelephonyRegistry才算上是一個(gè)真正的Service,可以接受客戶(hù)端的連接申請(qǐng)。
? ? ? ? 那么接下來(lái),我們?cè)趺吹玫竭@個(gè)Service呢?
三、如何得到注冊(cè)的服務(wù)
? ? ? ? 既然通過(guò)ServiceManager注冊(cè)了服務(wù),我們就需要再次通過(guò)ServiceManager得到它的服務(wù)對(duì)象。 [java]?view plaincopy? ? ? ? 通過(guò)這樣的方法,我們就得到了ITelephonyRegistry.aidl的對(duì)象sRegistry。
四、流程總結(jié)
? ? ? ? 我們現(xiàn)在回顧一下這種AIDL服務(wù)的框架。? ? ? ??我們通過(guò)繼承ITelephonyRegistry.Stub父類(lèi)去實(shí)現(xiàn)AIDL中規(guī)定的接口,然后把TelephonyRegistry作為ServiceManager注冊(cè)給SystemService。客戶(hù)端可以通過(guò)ServiceManager得到TelephonyRegistry的對(duì)象,然后就可以去調(diào)用AIDL中定義的接口了。
原文地址:http://blog.csdn.net/u010961631/article/details/12081641
與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Framework中的AIDL(原)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 应用层的AIDL用法(原)
- 下一篇: 两种AIDL用法分析(原)