问题1:
我正在研究Android服务,经常看到这样的代码:
private ISampleService.Stub sampleServiceIf = new ISampleService.Stub(){}
什么是.Stub
?
问题2:
我检查了"AIDL",但我想知道为什么我们必须使用它而不是Java接口文件?
发布于 2012-05-18 07:30:37
‘'Stub’是一个实现远程接口的类,你可以像使用本地接口一样使用它。它处理数据编组/解组以及向/从远程服务发送/接收数据。术语“存根”通常用于描述其他RPC方法(COM、Java remoting等)中的这种功能,但它的含义可能略有不同。
接口定义语言通常是独立于语言的,理论上您可以从它生成C++或Python存根代码。Android one是基于Java的,所以区别是微妙的。一个不同之处在于,在一个.aidl文件中只能有一个接口,而Java允许每个.java文件有多个类/接口。还有一些支持类型的规则,因此它与Java接口并不完全相同,您不能使用AIDL来代替AIDL。
发布于 2019-04-30 21:13:36
在AIDL文件中,可以使用远程服务的方法签名来定义接口。AIDL解析器从接口生成Java类,该类可用于两个不同的目的。
Proxy
类来为客户端提供对服务的访问,abstract
Stub
类,服务实现可以使用这个类通过远程方法的实现将其扩展为匿名类。
换句话说,
ISampleSevice.java
文件生成ISampleSevice.aidl
类onBind()
时必须返回给客户端一个Stub类对象,<代码>H221<代码><代码>H122<代码>在客户端的<代码>D23处,用户可以获取在远程服务中定义的存根的代理对象( ISampleService.Stub.asInterface()
返回代理类)。发布于 2012-05-18 09:04:27
嘿,请检查一下这个http://developer.android.com/guide/components/aidl.html。它将帮助您理解存根和AIDL。
https://stackoverflow.com/questions/10648280
复制相似问题