Приведи пример как Service могут общаться между собой

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

Ответ

Сервисы могут общаться через Messenger или AIDL (Android Interface Definition Language).

Messenger (проще):

// Сервис 1 - создает Handler и Messenger
val handler = object : Handler(Looper.getMainLooper()) {
    override fun handleMessage(msg: Message) {
        // Обработка сообщения
    }
}
val messenger = Messenger(handler)
// Передаем IBinder клиенту через onBind()

// Сервис 2 - отправляет сообщение
val serviceConnection = object : ServiceConnection {
    override fun onServiceConnected(name: ComponentName?, binder: IBinder?) {
        val messenger = Messenger(binder)
        val msg = Message.obtain().apply { what = 1 }
        messenger.send(msg)
    }
}

AIDL (для сложных взаимодействий):

  1. Создаем .aidl файл с интерфейсом.
  2. Реализуем Stub в сервисе.
  3. Клиент получает прокси через onBind() и вызывает методы.

Messenger проще, но AIDL дает больше контроля.