android 8.1 java直接通过ServiceManager.getService 获取cpp service机制

在Android 8.1系统中,Java可以直接通过ServiceManager.getService方法获取到Native底层服务,简化了Java层与Native层的交互。以"media.camera"服务为例,介绍了CameraService的创建与发布过程,以及Java如何通过ICameraService.aidl转换IBinder为ICameraService类型。在CPP中,虽然未找到ICameraService的直接定义,但系统自动生成的代码使得Java中的接口能在Native层被识别和使用。
摘要由CSDN通过智能技术生成

android8.1 java可以通过ServiceManager可获取native底Service, 节省了一些java层和native层service的重写与jni代码。使用了代码自动生成aidl机制

例如ServiceManager.getService("media.camera")

1. "media.camera" Service创建与发布

frameworks/av/camera/cameraserver/main_cameraserver.cpp

int main(int argc __unused, char** argv __unused)
{
    signal(SIGPIPE, SIG_IGN);


    // Set 3 threads for HIDL calls
    hardware::configureRpcThreadpool(3, /*willjoin*/ false);


    sp<ProcessState> proc(ProcessState::self());
    sp<IServiceManager> sm = defaultServiceManager();
    ALOGI("ServiceManager: %p", sm.get());
    CameraService::instantiate();   //创建并发布service
    ProcessState::self()->startThreadPool();
    IPCThreadState::self()->joinThreadPool();
}

frameworks/native/libs/binder/include/binder/BinderService.h

static void instantiate() { publish(); }


static status_t p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值