Binder在Java层的调用详解之AIDL

Binder是什么?

在开始介绍AIDL之前,我们必须对Binder有一个初步的了解。

Binder就是Android用来跨进程通信的一种方式,这个涉及的知识点太多,我会单独开一篇讲述。

在这里,我们需要知道的是,既然涉及到跨进程通讯,就肯定会有两个不同的进程,以及一条连接两个进程的通道。

这两个进程中,提供服务的进程我们把它叫做服务端,享受服务的进程我们把它叫做客户端,连接服务端和客户端的通道有很多,binder就是其中之一。

AIDL是什么?

Android Interface Definition Language,即Android接口定义语言

可以理解为用来生成binder通信代码的脚本语言

AIDL该怎么用?

我会选用Android的Doze服务来分析AIDL的使用步骤。

涉及到的文件有以下三个:

  • 服务端:DeviceIdleController.java
  • 客户端:DeviceIdleManager.java
  • 通道(Binder):IDeviceIdleController.aidl、ServiceManager.java

如果把客户端比作一个想吃饭的人,服务端比作一家提供很多菜品餐厅,那么AIDL就是餐厅中的菜单,ServiceManager就是指向各个餐厅的地图


一、通道(Binder)

我们看下IDeviceIdleController.aidl的具体代码实现

package android.os;

import android.os.IMaintenanceActivityListener;
import android.os.UserHandle;

/** @hide */
interface IDeviceIdleController {
    void addPowerSaveWhitelistApp(String name);
    ...
    void addPowerSaveTempWhitelistApp(String name, long duration, int userId, String reason);
}

这就是一个AIDL的标准写法,看起来就是这么枯燥无味且平淡,主要组成部分就是在interface中定义所有服务端向外提供的接口,就像是一家餐厅提供的菜单。

相信有些细心的同学,就会有些疑问,服务端的接口通过AIDL抛出来了,但是客户端怎么找到服务端呢?

这就涉及到Binder的核心实现ServiceManager,在本篇中不多介绍,后续会单开一章。

二、服务端

服务端作为服务的提供者,就像是一家餐厅,菜单上写出来的菜,硬着头皮也得烧出来。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JackayWakeUp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值