AIDL生成的Service句柄是什么?

What's the handle of Service generated by AIDL?

我们知道当设备booting.For时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方法会return一个Binder——实现IDCSCore.Stub,然后在ServiceConnect的onServiceBinded回调中得到IDCSCore.Stub.代理。 Android 系统服务,例如AlarmManagerSerice 注册在servicemanger 中,您可以使用adb shell service list 在系统管理器中查找所有系统服务,但我找不到IDCSCore 相关信息。 IDCSCore.Stub 在哪里?没有句柄的代理如何正确执行函数调用??

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

AOSP 系统服务Android 服务 都有不同的实现和工作方式。您不能绑定到 AOSP 系统服务。为了得到proxy stub,AOSP已经提供了getSystemService()API。 ServiceManager 持有系统服务的所有代理存根。

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

adb shell dumpsys activity services

什么是 IDCSCore?

要获取有关 AOSP 系统服务和 Android 服务的更多详细信息,请参阅此 link, AOSP System Service vs Service Differences