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

问题1:

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

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

什么是.Stub

问题2:

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

  • 编译AIDL时出错
  • Android RemoteExceptions和服务
  • 共享库项目的清单服务和权限
  • Android N无法在应用程序结算AIDL中编译
  • GREF在multithreading服务中增加/减less(aidl) - 这意味着什么?
  • 为什么ITelephony.aidl有效?
  • RxJava和缓存数据
  • 执行失败的任务':app:compileDebugAidl':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。