Как я могу обновить пользовательский интерфейс из службы с помощью MutableStateFlowAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как я могу обновить пользовательский интерфейс из службы с помощью MutableStateFlow

Сообщение Anonymous »

`Когда я запускаю сервис, пользовательский интерфейс не обновляется. Служба работает, потому что я вижу обновление в своем журнале.
Это мой упрощенный пример, но он все равно не работает.
Моя служба имеет значение MutableStateFlow, я делаю это каждую 1 секунду. излучать
`
class MyService : Service() {

private val _stateFlow = MutableStateFlow(0)
val stateFlow: MutableStateFlow = _stateFlow
private var i = 0

override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {

CoroutineScope(Dispatchers.IO).launch {
while (true) {
i++
_stateFlow.emit(i)
Log.d("service", "emit")
delay(1000)
}
}

Log.d("service", "started")
return START_STICKY
}
}

class MyViewModel : ViewModel() {

private val _serviceData = MutableStateFlow("Initial ViewModel Value")
val serviceData: StateFlow = _serviceData

fun observeServiceState(service: MyService) {
viewModelScope.launch {
service.stateFlow.collect { value ->
_serviceData.value = value.toString()
}
}
}
}

@Composable
fun MyApp(context: Context) {
val serviceIntent = Intent(context, MyService::class.java)
context.startService(serviceIntent)

MyComposable(service = MyService())
}
@Composable
fun MyComposable(service: MyService) {
val viewModel = MyViewModel()
val value by viewModel.serviceData.collectAsState()

Text(text = "Current value: $value")

viewModel.observeServiceState(service)
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... estateflow
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»