Нам известно, что системная служба 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.Системная служба Android, такая как AlarmManagerSerice, зарегистрирована в servicemanger, и вы можете использовать adb shell service list
, чтобы найти все системные службы в системном менеджере, но я не могу найти информацию, связанную с IDCSCore.Где находится IDCSCore.Stub?Как прокси без дескриптора правильно выполнить вызов функции ??
Я разочарован!Это немного сложно для меня ...