AIDL 生成的服务的句柄是什么?



众所周知,android系统服务在设备启动时会注册到系统管理器。例如:

AlarmManagerService alarm = new AlarmManagerService(context);
ServiceManager.addService(Context.ALARM_SERVICE, alarm);

上面的代码在中

/frameworks/base/services/java.com/android/server/SystemServer.java

因此,如果您想使用AlarmManager,只需要获取AlarmManagerService的代理来调用函数,然后AlarmManagerProxy调用BinderProxy中的相应方法即可执行。

重要的是,BinderProxy.java或BpBinder.cpp具有Binder-AlarmManagerService的正确句柄。

但当谈到AIDL时,例如:

interface IDCSCore {
int add(int i,int j);
void show();
}

当我们在另一个进程中绑定远程服务时,onBind方法将返回一个Binder——IDCSCore.Stub的实现,然后在ServiceConnect onServiceBinded回调中获得IDCSCore.Stub.Proxy。安卓系统服务,如AlarmManagerSerice在servicemanager中注册,您可以使用adb shell service list在系统管理器中查找所有系统服务,但我找不到IDCSCore相关信息。IDCSCore.Stub在哪里?没有句柄的代理如何正确执行函数调用??

我很沮丧!这对我来说有点复杂…

AOSP系统服务

Android服务要列出所有活动服务,可以使用以下命令。

adb shell dumpsys activity services

什么是IDCSCore?

要了解更多关于AOSP系统服务和Android服务的详细信息,请参阅此链接,AOSP系统服务与服务差异

最新更新