众所周知,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服务要列出所有活动服务,可以使用以下命令。 什么是IDCSCore? 要了解更多关于AOSP系统服务和Android服务的详细信息,请参阅此链接,AOSP系统服务与服务差异adb shell dumpsys activity services