Ответ
В Android есть несколько способов передачи данных между Fragment и Service:
- Через BroadcastReceiver
Сервис отправляетIntentсBroadcast, аFragmentрегистрируетBroadcastReceiverдля его обработки.
// Service
val intent = Intent("ACTION_DATA").apply { putExtra("key", value) }
sendBroadcast(intent)
// Fragment
val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val data = intent?.getStringExtra("key")
}
}
LocalBroadcastManager.getInstance(context).registerReceiver(receiver, IntentFilter("ACTION_DATA"))
-
Через LiveData/Flow
ИспользуетсяViewModelили общийRepositoryдля обмена данными. Сервис обновляетLiveData/Flow, аFragmentподписывается на изменения. -
Через Messenger/Handler
Сервис создаетMessengerсHandler, аFragmentотправляет сообщения черезMessenger. -
Через Callback Interface
Сервис реализует интерфейс, который передается изFragmentпри запуске сервиса. -
Через SharedPreferences/DB
Сервис записывает данные вSharedPreferencesили БД, аFragmentчитает их.
Выбор зависит от сложности данных и требований к производительности.