AIDL使用示例

时间:2011-12-21 14:20:13

标签: android aidl

要理解android中的AIDL,我想要一个真实的例子,意味着我们需要使用AIDL的开发场景。

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

  1. 用于与手机外部通信。

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

  3. 他们在docs中讨论什么样的服务

6 个答案:

答案 0 :(得分:40)

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

何时使用AIDL?当您需要服务时。你什么时候需要服务?如果要共享数据控制其他应用程序中的内容,则需要使用AIDL作为接口的服务。 (仅在共享数据时使用Content Provider。)

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

答案 1 :(得分:17)

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

使用:有些情况下,一个进程需要与其他进程交谈以获取某些信息。

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

简单地说,AIDL是一个"协议"客户获取,告诉它如何与服务对话。服务本身将拥有该协议的副本(因为它为其客户发布)。然后,服务将实现一旦请求到达时如何处理的细节,或者说某人正在与之交谈时的处理

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

需要注意的一点是,AIDL只是多线程环境所必需的。如果你不需要处理多线程拱,你可以取消Binders。

答案 2 :(得分:3)

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

答案 3 :(得分:0)

1 - 用于与手机外部通信。 与应用程序外部进行通信。

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

3 - 他们在docs中讲的是什么样的服务?

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

答案 4 :(得分:0)

您可以使用AIDL在应用程序/进程之间进行通信

示例:假设您有三个应用程序APP_A,APP_B和APP_C,现在假设这三个应用程序具有某些共同的功能,因此您不必在所有应用程序中编写相同的代码,就可以制作一个单独的APP_AIDL(查找服务) )在后台运行。

答案 5 :(得分:0)

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

这个应用的主要功能是

  • 从其他本地应用接收本地日志(另一个应用需要实现AIDL来发送日志)
  • 将日志保存到数据存储区
  • 显示日志
  • 也许可以对本地日志做一些事情(例如:搜索、删除)
  • 可能会在发生错误日志时通知开发人员

这个应用的好处

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

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