通过阅读Android文档...它让我感到困惑和产生了很多问题,所以对于我来说阅读整个文档是很困难的,有人可以帮助我吗?
1. AIDL是用于与手机外部通信还是与不同的应用程序通信?(为什么我们需要与其他应用程序通信) 2. 文档中所提到的服务是什么类型的服务?请解释一下。
AIDL用于Binder。Binder是在Android Service上执行RPC调用的机制。
何时使用AIDL?当需要服务时。什么时候需要服务?如果您想共享数据并且在另一个应用程序中控制某些内容,则需要使用AIDL作为接口的服务。(仅共享数据时使用Content Provider)。
服务可以在应用程序内部使用,作为MVC模式中的模型卷。
AIDL是Android接口定义语言,可以进行IPC调用。
用途:某些情况下一个进程需要与另一个进程通信以获取特定信息。
例如:进程A 需要呼叫状态的信息来确定是否需要更改呼叫类型(例如从音频呼叫到视频呼叫或反之亦然)。您可以从某些监听器中获取呼叫状态,但要从音频呼叫更改为视频呼叫,进程A 需要更改的方式。这种“钩子”或更改呼叫的方法通常是电信类的一部分,这些类是电信进程的一部分。因此,为了从电信进程获取这样的信息,您可以编写一个 电信服务 (作为Android电信进程的一部分运行),它将允许您查询或更改呼叫类型。由于此处的进程A(客户端)正在使用与电信进程通信以更改呼叫类型的远程服务,因此需要有一个接口来与服务进行通信。由于电信服务是提供者,进程A(客户端)是用户,因此它们都需要同意一个它们可以理解和遵循的接口(协议)。这种接口就是AIDL,它允许您通过远程服务与电信进程进行通信,并完成一些工作。
简单来说,AIDL是客户端获得的“协议”,告诉它如何与服务进行通信。服务本身将拥有该协议的副本(因为它是为其客户发布的)。一旦请求到达或者有人在与服务交互时,服务将实现详细信息并处理它。
因此,进程A通过服务请求更改呼叫,服务收到请求后,与电信进程进行通信(因为它是其中的一部分)并将呼叫更改为视频呼叫。
需要注意的一个重要点是,只有在多线程环境下才需要使用AIDL。如果不需要处理多线程结构,则可以不使用Binder。
LocalLogServerApp
。也许它不能成为一个生产应用程序,但它仍然展示了使用 AIDL 的一些价值。Firebase Log
可能有所帮助,但 Firebase
会接收来自多个设备的日志。
- 可重用,许多应用程序可以使用它,代码更少。1 - 它是用于与手机外部通信吗? 它是用于与应用程序外部通信。
2 - 还是用于与不同的应用程序通信,(为什么我们需要与其他应用程序通信) 正如@GodOnScooter所提到的,当您的应用程序与电话服务通信时,实际上是与另一个部分通信。
3 - 文档中他们在谈论什么样的服务?
这是在系统的不同进程中运行的服务,要绑定到此服务,您需要使用IPC(进程间通信),AIDL用于实现此功能。