Как обновить поток через интервал, когда приложение находится на переднем плане, а не в фоновом режимеAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как обновить поток через интервал, когда приложение находится на переднем плане, а не в фоновом режиме

Сообщение Anonymous »

У меня есть поток в модели представления, который выдает местоположение пользователя каждые 15 секунд

Код: Выделить всё

    val locations = MutableStateFlow(emptyList())

private val _locations = MutableStateFlow(emptyList())
val locations: StateFlow
get() = _locations.asStateFlow()

private val userLocation: StateFlow = flow {
while (currentCoroutineContext().isActive) {
Timber.v("Updating user location")
emit(getLocation())
delay(15000L)
}
}.stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(5000L),
null
)

init {
viewModelScope.launch {
combine(userLocation, cachedLocations) { androidLocation, cachedLocations ->
Timber.v("Updating sortable locations")
_locations.emit(getSortedLocations(androidLocation, cachedLocations))
}.collect()
}
}

fun updateLocations() {
viewModelScope.launch {
Timber.v("Updating sortable locations")
val androidLocation = getLocation()
val cachedLocations = cachedLocations.value
locations.value = getSortedLocations(androidLocation, cachedLocations)
}
}
На моем слое пользовательского интерфейса я собираю данные с помощью жизненного цикла.

Код: Выделить всё

@Composable
fun Screen() {
val locations by viewModel.locations.collectAsStateWithLifecycle()
}
Когда приложение находится в фоновом режиме, цикл while в потоке userLocation продолжает работать. Как я могу обновлять местоположение пользователя каждые 15 секунд с помощью потоков, но только тогда, когда приложение находится на переднем плане? Нужно ли мне использовать область жизненного цикла на уровне пользовательского интерфейса?

Подробнее здесь: https://stackoverflow.com/questions/784 ... n-in-backg
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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