爲了避免無用的答案關於如何在自己的項目中實現AIDL - 我瞭解如何在自己的項目中使用AIDL。Android究竟如何鏈接AIDL接口和遠程服務?
我還不清楚它是如何在Android源代碼中使用的?
例如,android.media包中有IAudioService AIDL接口。 還有AudioService java文件。在IInterfaceServiceName.aidl中定義了接口並且實現在InterfaceServiceName.java中的例子很多。所以,我認爲AIDL的內部使用沒有第一資本I的名稱尋找Service,然後使用它。但是,這個理論被IWifiManager和WifiService所拆除。
然而,所有這些AIDL實現共享一件事 - 它們都擴展了IInterfaceName.Stub類。那麼,這意味着AIDL內部尋找擴展IInterfaceName.Stub的類?但是如果有多個類擴展它呢?並且這些類別根本不是服務...
或者有一些服務管理器,它以某種方式創建服務並將這些AIDL實現作爲綁定程序創建?如果是這樣,請將我指向這位神祕的服務經理。
編輯:我找到了這個服務經理。它是android.os包中的ServiceManager。現在可以理解爲什麼這些SomethingService實際上不是服務,而是實際上IBinder--服務管理器以某種方式通過方法添加服務(String,IBinder)以給定的IBinder創建服務。但是現在混亂只會變得更糟。 這個服務的實現也在於有點奇怪的ServiceManagerNative,它涉及與未知的IBinder進行遠程交易。現在我完全迷失了。那麼這個ServiceManager如何啓動呢?它的服務如何增加?
嘗試閱讀本http://mobileorchard.com/android-app-development-implementing-remote-android-services-with-aidl/ – pskink
你沒讀過的問題冷杉這句話,是嗎?我不感興趣如何在我的應用中實現AIDL - 我知道該怎麼做。相反,我試圖瞭解Android系統服務和像IWifiManager這樣的AIDL如何連接。 –
所以你沒有任何問題與sidl本身,但想知道android內部,對不對? – pskink