Ответ
Существует три основных способа взаимодействия с Bound Service:
- Binder - для сервисов в том же процессе. Создаем класс-наследник Binder в сервисе и возвращаем его в onBind():
class LocalBinder extends Binder {
MyService getService() {
return MyService.this;
}
}
- Messenger - для межпроцессного взаимодействия (IPC). Основан на Handler:
// Сервис
Handler handler = new Handler();
Messenger messenger = new Messenger(handler);
// Клиент
Messenger messenger = new Messenger(service);
Message msg = Message.obtain(null, MSG_SAY_HELLO, 0, 0);
messenger.send(msg);
- AIDL (Android Interface Definition Language) - для сложных IPC-сценариев. Требует создания .aidl-файла с интерфейсом.
Binder - самый быстрый, но только в рамках одного процесса. Messenger проще AIDL, но менее гибкий. AIDL дает полный контроль над IPC, но сложнее в реализации.