Android框架之Camera(3)透过Camera服务看Binder进程间通信

本文探讨了Android中Camera服务如何利用Binder进行进程间通信(IPC),详细介绍了IPC工具和RPC概念。通过分析Camera服务的接口、实现和服务代理三个角色,阐述了Binder在服务中的工作原理。内容包括服务接口的声明、服务实现、服务代理的实现,并以getCameraInfo()函数为例,展示了调用过程。最后,鼓励读者通过实践理解Binder机制。
摘要由CSDN通过智能技术生成

Android 6.0
Android Binder用来管理Android进程,用途有两个:

1、IPC(Inter Process Communication)工具,用于进程间通信。

2、RPC(Remote Procedure Call)远程函数调用,使得当前进程调用另一个进程的函数就像调用自身的函数一样。当然,她也属于IPC范畴。

关于Binder的历史、驱动实现、在Android中的框架实现等内容,参考结尾列出的极好的资料;这里通过Camera服务的实现、使用,熟悉一个本地服务(C服务)的创建。


一个Binder服务大体来说由3个角色构成:

1、服务接口

2、服务实现

3、服务代理

以Camera服务为例,她们之间关系如下图:



Camera服务接口

服务接口声明某个服务需要实现的功能函数,这里只负责声明,然后在服务和代理中实现。比如上图Camera服务的getCameraInfo()函数。

static sp<IBinder>  asBinder(const IInterface*);
接口中的asBinder()函数将服务接口类型转换为IBinder类型,作用是在进行Binder IPC通信时,IBinder对象需要保存到RPC数据中传递给Binder驱动。
asInterface()函数由宏DECLARE_META_INTERFACE/IMPLEMENT_META_INTERFACE生成,用于将IBinder转化为服务接口:
android::sp<ICameraService> ICameraService::asInterface(const android::sp<android::IBinder>& obj)
{
    android::sp<ICameraService> intr;
    if (obj != NULL) {
        intr = static_cast<ICameraService*>(
            obj->queryLocalInterface(
                    ICameraService::descriptor).get());
        if (intr == NULL) {
            intr = new BpCameraService(ob
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值