日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人工智能 > ChatGpt >内容正文

ChatGpt

Framework中的AIDL(原)

發(fā)布時(shí)間:2025/3/15 ChatGpt 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Framework中的AIDL(原) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?? ? ? 在上一節(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
  • @ITelephonyRegistry.aidl??
  • interface?ITelephonyRegistry?{??
  • ????void?listen(String?pkg,?IPhoneStateListener?callback,?int?events,?boolean?notifyNow);??
  • ????void?notifyCallState(int?state,?String?incomingNumber);??
  • ????void?notifyServiceState(in?ServiceState?state);??
  • ????void?notifySignalStrength(in?SignalStrength?signalStrength);??
  • ????void?notifyMessageWaitingChanged(boolean?mwi);??
  • }??
  • ? ? ? ? 再來(lái)看這個(gè)服務(wù)的真正實(shí)現(xiàn):

    [java]?view plaincopy
  • @TelephonyRegistry.java??
  • class?TelephonyRegistry?extends?ITelephonyRegistry.Stub?{??
  • ????TelephonyRegistry(Context?context)?{??
  • ????????......??
  • ????}??
  • ????void?listen(String?pkg,?IPhoneStateListener?callback,?int?events,?boolean?notifyNow){??
  • ????????......??
  • ????}??
  • ????void?notifyCallState(int?state,?String?incomingNumber){??
  • ????????......??
  • ????}??
  • ????void?notifyServiceState(in?ServiceState?state){??
  • ????????......??
  • ????}??
  • ????void?notifySignalStrength(in?SignalStrength?signalStrength){??
  • ????????......??
  • ????}??
  • ????void?notifyMessageWaitingChanged(boolean?mwi){??
  • ????????......??
  • ????}??
  • }??
  • ? ? ? ? 上面的兩個(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
  • @SystemServer.java??
  • class?ServerThread?extends?Thread?{??
  • ????@Override??
  • ????public?void?run()?{??
  • ????????try?{??
  • ????????????telephonyRegistry?=?new?TelephonyRegistry(context);??
  • ????????????ServiceManager.addService("telephony.registry",?telephonyRegistry);??
  • ????????}??
  • ????}??
  • }??
  • ? ? ? ? 我們看到,在這一步中,把telephonyRegistry對(duì)象(也就是ITelephonyRegistry.Stub的子類(lèi)對(duì)象)作為一個(gè)Service注冊(cè)給了ServiceManager。并且注冊(cè)的名字是“telephony.registry”
    ? ? ? ? 有了這一步,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
  • private?ITelephonyRegistry?sRegistry;??
  • sRegistry?=?ITelephonyRegistry.Stub.asInterface(ServiceManager.getService("telephony.registry"));??
  • ? ? ? ? 通過(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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。