Android跨进程通信

Android AIDL 原理解析

隐身守侯 提交于 2020-11-03 03:29:01
Android AIDL 原理解析 如果去阅读Android的源代码,就会发现里面大量用到了Binder、AIDL相关知识,比如当我们去使用 AMS 、 PMS 、 WMS 这些核心服务,因为他们都运行在 system_server 进程,普通应用想调用他们提供的服务(例如: startActivity() ,就需要 AMS 来实现),就必须要跨进程调用,因此,我们在阅读代码之前,必须先去尝试理解Binder、AIDL相关知识。 为什么要使用AIDL呢? 通过AIDL,可以让本地调用远程服务器的接口就像调用本地接口那么简单,让用户无需关注内部细节,只需要实现自己的业务逻辑接口,内部复杂的参数序列化发送、接收、客户端调用服务端的逻辑,你都不需要去关心了。 一 从一个例子开始 我们通过一个简单的跨进程调用的例子来理解AIDL。 设计一个简单的场景: 我们有一个 CoreService 运行在 ":core" 进程中,提供文件下载服务,我们会在Activity中去bind这个Service,并且调用它为我们提供的服务。 实现起来很简单,只需要以下几个步骤: 定义一个AIDL文件 interface IDownloadService { /** * 下载 * @param url */ void download(String url); /** * 删除下载任务 * @param url