Android-Binder机制及AIDL使用

//添加view
wm.addView(view, layoutParams);

注册服务(addService): 在Android开机启动过程中,Android会初始化系统的各种 Service,并将这些Service向ServiceManager注册(即让ServiceManager管理)。 这一步是系统自动完成的。
获取服务(getService): 客户端想要得到具体的Service直接向ServiceManager要 即可。客户端首先向ServiceManager查询得到具体的Service引用,通常是Service 引用的代理对象,对数据进行一些处理操作。即第2行代码中,得到的wm是 WindowManager对象的引用。
使用服务: 通过这个引用向具体的服务端发送请求,服务端执行完成后就返回。即 第6行调用WindowManageraddView函数,将触发远程调用,调用的是运行在 systemServer进程中的WindowManageraddView函数。

使用服务的具体执行过程

1.Client通过获得一个Server的代理接口,对Server进行调用。
2.代理接口中定义的方法与Server中定义的方法是一一对应的。
3.Client调用某个代理接口中的方法时,代理接口的方法会将Client传递的参数打 包成Parcel对象。
4.代理接口将Parcel发送给内核中的Binder Driver。
5.Server会读取Binder Driver中的请求数据,如果是发送给自己的,解包Parcel 对象,处理并将结果返回。
6.整个的调用过程是一个同步过程,在Server处理的时候,Client会Block住。因 此Client调用过程不应在主线程。

AIDL的使用

1.AIDL的简介

AIDL (Android Interface Definition Language) 是一种接口定义语言,用于生成可以 在Android设备上两个进程之间进行进程间通信(Interprocess Communication, IPC) 的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service) 对象的操作,就可以使用AIDL生成可序列化的参数,来完成进程间通信。

简言之,AIDL能够实现进程间通信,其内部是通过Binder机制来实现的,后面会 具体介绍,现在先介绍AIDL的使用。

2.AIDL的具体使用

AIDL的实现一共分为三部分,一部分是客户端,调用远程服务。一部分是服务端, 提供服务。最后一部分,也是最关键的是AIDL接口,用来传递的参数,提供进程间 通信。
先在服务端创建AIDL部分代码。
AIDL文件 通过如下方式新建一个AIDL文件

默认生成格式

interface IBookManager {
/**

    <
  • 16
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值