Ответ
Сервис не может напрямую взаимодействовать с UI, так как работает в фоне без интерфейса. Однако есть несколько способов коммуникации:
- Через Activity - используя BroadcastReceiver или интерфейсы (через Binder в LocalService)
- Уведомления - показ Notification через NotificationManager
- Обновление данных - через LiveData/Flow, которые наблюдает Activity/Fragment
Пример с BroadcastReceiver:
// В сервисе
val intent = Intent("MY_ACTION").apply {
putExtra("data", "Hello from Service")
}
sendBroadcast(intent)
// В Activity
val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val data = intent.getStringExtra("data")
// обновляем UI
}
}
registerReceiver(receiver, IntentFilter("MY_ACTION"))
Для сложных сценариев лучше использовать ViewModel + LiveData/StateFlow.