怎样知道调用aidl接口的进程
发布网友
发布时间:2024-10-24 18:44
我来回答
共1个回答
热心网友
时间:2024-11-01 04:23
先来解释一下AIDL,这东西其实算是提供了一种自定义客户端和服务器之间RPC通信协议的通用方法,并由Android的编译器自动生成这个协议的接口实现程序,包括客户端的interface和服务器端的stub。
其实你的需求用AIDL和socket都可以实现,AIDL比socket强的一点就是,用它定义了协议之后,客户端和服务器程序直接把aidl文件拿过去就可以自动生成实现这个协议的部分框架代码,而不需要自己重头写,而如果你用socket来做这个,那么可能客户端和服务器端分别需要写一些代码来把函数调用和socket通信之间做转换,这不光带来工作量的增加,也增加了因为客户端和服务器端代码不匹配造成的bug风险。当然,反过来说,socket也有灵活的优势,比如你的客户端和服务器可以不光是Android程序,也可以是其他支持同一协议的比如linux程序。
然后说服务器程序的启动,其实不管用AIDL还是socket,跟服务器启动都是两码事,一般如果用service组件实现服务器,启动它是使用Context.startService方法,service组件自己提供了避免重复启动的机制,与AIDL和socket无关,service启动之后,如果是socket方式则由service程序开socket端口(但这个端口需要由其他方法通知客户端,因为想用的端口有可能被其他程序占用),如果是AIDL方式则什么都不用做了。
最后说绑定,所谓AIDL的绑定,只是说在一个客户端和一个服务器之间建立一个连接,类似于一个数据库的connection,或者一个socket,这个连接并不会独占服务器进程,服务器可以同时接受多个客户端的访问请求,所以在这一点上说用AIDL和用socket没有什么不同。
至于最后选择哪种实现由你自己分析决定,只是觉得如果是Android App的话,AIDL会简单一些。