Какие знаешь способы общения с Bound Service

«Какие знаешь способы общения с Bound Service» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Существует три основных способа взаимодействия с Bound Service:

  1. Binder - для сервисов в том же процессе. Создаем класс-наследник Binder в сервисе и возвращаем его в onBind():
class LocalBinder extends Binder {
    MyService getService() {
        return MyService.this;
    }
}
  1. 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);
  1. AIDL (Android Interface Definition Language) - для сложных IPC-сценариев. Требует создания .aidl-файла с интерфейсом.

Binder - самый быстрый, но только в рамках одного процесса. Messenger проще AIDL, но менее гибкий. AIDL дает полный контроль над IPC, но сложнее в реализации.