Ответ
Сервисы могут общаться через 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 (для сложных взаимодействий):
- Создаем
.aidlфайл с интерфейсом. - Реализуем
Stubв сервисе. - Клиент получает прокси через
onBind()и вызывает методы.
Messenger проще, но AIDL дает больше контроля.