#android #kotlin #kotlin-flow #kotlin-coroutines
Вопрос:
У меня есть несколько общих потоков, которые объединяются в несколько потоков в разных классах, а затем эти потоки объединяются в один. Исходные общие потоки настроены таким образом:
protected val statusMutable = MutableSharedFlow<Int>()
val status: Flow<Int> = statusMutable.asSharedFlow()
Итак, конфигурация по умолчанию. В конце концов, у меня есть такой код:
val status
get() = merge(
object1.status, // merged shared flows
object2.status, // merged shared flows
object3.status, // merged shared flows
statusMutable
).stateIn(GlobalScope, SharingStarted.Lazily, initialValue = someInt)
Этот поток должен быть бесконечным горячим потоком, поэтому я использую GlobalScope
(вы также можете сказать мне, как лучше подойти к этому, если есть лучший способ, но это не настоящая проблема).
Фактическая проблема заключается в том, что значения выдаются и собираются нормально, но результат StateFlow
по какой-то причине не обновляет свое свойство value (следовательно, кэш воспроизведения). Это приводит к ситуации, когда новый подписчик не получает последнее значение по подписке. Что может быть причиной этого и как я могу это исправить?
Ответ №1:
Оказывается, проблема в том, что я получаю доступ к этому потоку через геттер, хотя мне просто нужно было назначить его свойству. Какая глупая ошибка! Что забавно, я сам отказался от поиска ответа и опубликовал этот вопрос только для того, чтобы заметить ошибку примерно через 15 минут.