android - java中的 "Stub "和 "AIDL"是什么意思?

标签 android service stub aidl

问题一:

我在研究Android服务,经常看到这样的代码:

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

什么是.Stub

问题 2:

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

最佳答案

'Stub' 是一个实现远程接口(interface)的类,您可以像使用本地接口(interface)一样使用它。它处理数据编码/解码以及向/从远程服务发送/接收。术语“ stub ”通常用于描述其他 RPC 方法(COM、Java 远程处理等)中的此功能,但它的含义可能略有不同。

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

关于android - java中的 "Stub "和 "AIDL"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10648280/

相关文章:

java - 由于正在运行的线程,应用程序在关闭 fragment 时崩溃

android - 由于列不存在而强制关闭游标

android - 向 AOSP 添加自己的框架或库

android - System.currentTimeMillis() 在华为上返回错误的时间戳

来自库的 Android 外部服务(AAR,不是共享服务)

service - 更新应用程序层后,TFSBuildServiceHost服务未在TFS 2010上运行

javascript - 如何使用 sinon 正确获取附加到全局的属性?

ruby - 回到 rspec-mocks 中的原始方法

node.js - node express es6 sinon stub 中间件不工作

android - 如何在本地的 Activity 和服务之间来回发送数据