59

要了解AIDL在 android 中,我想要一个现实生活中的例子,这意味着我们需要在什么开发场景中使用AIDL

通过阅读Android Docs ...它让我感到困惑和很多问题,所以很难为我阅读整个文档,任何人都可以帮助我

  1. 是为了和手机外的交流。

  2. 或与不同的应用程序通信,(为什么我们需要与其他应用程序通信)

  3. 他们在文档中谈论什么样的服务

4

5 回答 5

46

AIDL 用于 Binder。Binder 是一种对 Android 服务进行 RPC 调用的机制。

何时使用 AIDL?当您需要服务时。您什么时候需要服务?如果你想在另一个应用程序中共享数据控制某些东西,你需要一个使用 AIDL 作为接口的服务。(仅在共享数据时使用 Content Provider)。

服务可以在您的应用程序中用作 MVC 模式中的模型滚动。

于 2011-12-21T14:30:33.793 回答
29

AIDL 是 Android 接口定义语言。这基本上允许您进行 IPC 调用。

用途:在某些情况下,一个进程需要与另一个进程对话才能获得某些信息。

示例:进程 A需要呼叫状态信息来确定是否需要更改呼叫类型(例如音频到视频呼叫,反之亦然)。您可能会从某些听众那里获得呼叫状态,但是要将呼叫类型从音频更改为视频,进程 A需要一个挂钩来更改。这种“挂钩”或更改呼叫的方式通常是 Telephony Classes 的一部分,它是Telephony Process的一部分。因此,为了从 Telephony 进程中获取此类信息,可以编写一个电话服务(它作为 android 电话进程的一部分运行),它允许您查询或更改呼叫类型。由于这里的进程 A(客户端)正在使用这个远程服务,它与改变呼叫类型的电话进程,它需要有一个与服务对话的接口。由于电话服务是提供者,而流程 A(客户端)是用户,他们都需要就他们可以理解和遵守的接口(协议)达成一致。这样的接口是AIDL,它允许您(通过远程服务)与 Telephony 进程交谈并完成一些工作。

简单地说,AIDL 是客户获得的“协议”,它告诉它如何与服务交谈。服务本身将拥有该协议的副本(因为它是为其客户发布的)。然后,服务将实施有关请求到达后如何处理的详细信息,或者说何时有人与它交谈

因此,通过服务处理 A 请求更改呼叫,服务获取请求,它与电话进程对话(因为它是其中的一部分)并将呼叫更改为视频。

需要注意的重要一点是,AIDL 仅在多线程环境中是必需的。如果您不需要处理多线程拱门,则可以取消 Binder。

于 2014-08-20T22:32:33.507 回答
4

另一个现实世界的例子是 Google Play 许可证正在使用 AIDL。

于 2015-01-25T09:43:32.877 回答
1

我对 AIDL 的示例也有同样的想法,很难找到一个想法来制作一个使用 AIDL 的示例应用程序。然后我有一个想法,创建一个LocalLogServerApp. 也许它不能成为一个生产应用程序,但它仍然显示出使用 AIDL 的一些价值

这个应用程序的主要功能是

  • 从其他本地应用接收本地日志(其他应用需要实现AIDL发送日志)
  • 将日志保存到数据存储
  • 显示日志
  • 也许对本地日志做点什么(例如:搜索、删除)
  • 当错误日志发生时可能通知开发人员

这个应用程序的好处

  • 当您遇到一些非常奇怪的问题时,可以使用本地日志,这些问题有时会在某些特定设备上发生。在这种情况下,common Log 将无济于事,debug 将无济于事,Firebase Log可能会帮助但从Firebase多个设备接收日志。
  • 可重复使用,许多应用程序可以用更少的代码使用它

希望您发现这个想法有助于找到另一个更好的 AIDL 示例 https://github.com/PhanVanLinh/AndroidLocalLogServer https://github.com/PhanVanLinh/AndroidLocalLogClientTest

于 2021-01-28T09:12:04.240 回答
0

1 - 是否用于与手机外部通信。 它与应用程序外部通信。

2 - 或与不同的应用程序通信,(为什么我们需要与其他应用程序通信) 正如@GodOnScooter 提到的,当您的应用程序与实际上是另一部分的电话服务通信时。

3 - 他们在文档中谈论什么样的服务?

这是一个在系统的不同进程中运行的服务,要绑定到该服务,您需要 IPC(进程间通信),AIDL 用于实现这一点。

于 2017-04-25T14:33:25.380 回答