Какие знаешь способы передачи данных между Activity и Service

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

Ответ

В Android есть несколько способов передачи данных между Activity и Service:

  1. Intent Extras - простейший способ через putExtra():
val intent = Intent(this, MyService::class.java)
intent.putExtra("KEY", "value")
startService(intent)
  1. Messenger - для межпроцессного взаимодействия:
// В Service:
val messenger = Messenger(Handler {
    // Обработка сообщения
    true
})

// В Activity:
val msg = Message.obtain()
msg.replyTo = activityMessenger
serviceMessenger.send(msg)
  1. Bound Service с интерфейсом через Binder:
class LocalBinder : Binder() {
    fun getService(): MyService = this@MyService
}

// В Activity через ServiceConnection
  1. BroadcastReceiver - для широковещательной рассылки

  2. SharedViewModel - если Service живет в том же процессе

Для сложных случаев лучше использовать Messenger или Bound Service, для простых - достаточно Intent. Важно учитывать жизненный цикл компонентов и возможные утечки памяти.