Обязательно ли связывать Service с UI

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

Ответ

Нет, Service не обязательно связывать с UI. Он может работать в фоне независимо от активности пользовательского интерфейса. Однако, если нужно обновлять UI на основе данных из Service, можно использовать:

  1. BroadcastReceiver - для отправки широковещательных сообщений
  2. LiveData/Flow - через ViewModel
  3. Handler/Looper - для передачи сообщений в UI-поток
  4. Callback-интерфейсы - при прямом связывании

Пример с BroadcastReceiver:

// В Service
val intent = Intent("DATA_UPDATE_ACTION").apply {
    putExtra("data", someData)
}
sendBroadcast(intent)

// В Activity
val receiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        updateUI(intent.getExtra("data"))
    }
}
registerReceiver(receiver, IntentFilter("DATA_UPDATE_ACTION"))

Для долгих операций лучше использовать WorkManager вместо Service.