要理解android中的AIDL
,我想要一个真实的例子,意味着我们需要使用AIDL
的开发场景。
通过阅读Android Docs ...它让我感到困惑和许多问题,所以很难为我阅读整篇文档,任何人都可以帮助我
用于与手机外部通信。
或与不同的应用进行通信,(为什么我们需要与其他应用进行通信)
他们在docs中讨论什么样的服务
答案 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 的一些价值
这个应用的主要功能是
这个应用的好处
Firebase Log
可能有帮助,但 Firebase
从多个设备接收日志。希望你发现这个想法有助于找到另一个更好的 AIDL 示例 https://github.com/PhanVanLinh/AndroidLocalLogServer https://github.com/PhanVanLinh/AndroidLocalLogClientTest