Ответ
В Android есть несколько способов передачи данных между Activity и Service:
- Intent Extras - простейший способ через
putExtra():
val intent = Intent(this, MyService::class.java)
intent.putExtra("KEY", "value")
startService(intent)
- Messenger - для межпроцессного взаимодействия:
// В Service:
val messenger = Messenger(Handler {
// Обработка сообщения
true
})
// В Activity:
val msg = Message.obtain()
msg.replyTo = activityMessenger
serviceMessenger.send(msg)
- Bound Service с интерфейсом через Binder:
class LocalBinder : Binder() {
fun getService(): MyService = this@MyService
}
// В Activity через ServiceConnection
-
BroadcastReceiver - для широковещательной рассылки
-
SharedViewModel - если Service живет в том же процессе
Для сложных случаев лучше использовать Messenger или Bound Service, для простых - достаточно Intent. Важно учитывать жизненный цикл компонентов и возможные утечки памяти.