为了避免无用的答案关于如何在自己的项目中实现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