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