在Java中,“Stub”和“AIDL”是什么?

问题1:

我正在学习Android服务,并经常看到这样的代码:

private ISampleService.Stub sampleServiceIf = new ISampleService.Stub(){} 

什么是.Stub

问题2:

我检查了“ AIDL ”,但我想知道为什么我们必须使用它而不是Java接口文件?

Solutions Collecting From Web of "在Java中,“Stub”和“AIDL”是什么?"

'Stub'是一个类,它以一种可以像使用本地接口一样的方式实现远程接口。 它处理数据篡改/解组以及从远程服务发送/接收数据。 术语“存根”通常用于描述其他RPC方法(COM,Java远程处理等)中的这个function,但这可能意味着稍有不同的东西。

IDL(接口定义语言)通常是独立于语言的,理论上可以从中生成C ++或Python存根代码。 Android是基于Java的,所以区别是微妙的。 一个区别是你只能在.aidl文件中有一个接口,而Java允许每个.java文件有多个类/接口。 支持哪些types也有一些规则,所以它与Java接口不完全相同,并且不能使用一个来代替AIDL。

嘿,请检查这个http://developer.android.com/guide/components/aidl.html 。 它会帮助你理解存根和AIDL。