- Цитирую ответ здесь: канал или mutablesharedflow, какой из них является лучшей заменой устаревшего localbroadcastmanager
Итак, они представили Flow. Но Flow — это холодная наблюдаемость, где каждый подписчик получает свои данные (независимо от других подписчиков). С SharedFlow вы получаете горячую наблюдаемую, которая генерируется независимо от наличия каких-либо подписчиков.
Вы можете сделать то же самое с ConflatedBroadcastChannel. Но JetBrains рекомендует использовать Flow в пользу Channels из-за их более простого API.
Поэтому, если вы хотите перейти на Coroutines и вам нужна горячая наблюдаемая информация, которую могут прослушивать несколько подписчиков, вам следует использовать SharedFlow.
- https://betterprogramming.pub/stop-calling-kotlin -flows-hot-and-cold-48e87708d863
- Когда вы хотите инкапсулировать свой код, создающий ценность, таким образом чтобы потребителям не приходилось беспокоиться о том, когда он запускается, останавливается или выходит из строя, используйте поток.
- когда вы хотите передать значения из одну сопрограмму к другой, используйте канал.
Также в в проекте, над которым я работаю, мы используем Channel в реализации модели представления MVI.
Код: Выделить всё
private val uiEvents = Channel
(Channel.UNLIMITED)viewModelScope.launch(dispatcher) {
uiEvents.consumeAsFlow().collect { uiEvent ->
fun push(event: UiEvent) {
uiEvents.trySend(event)
}
Что означает фраза «когда вы хотите передать значения из одной сопрограммы в другую, используйте канал» "
Могу ли я понять это так, что в одном месте я, например, отправляю событие типа Unit, чтобы затем отобразить тост во фрагменте? Предположим, что это событие собирает только один фрагмент. Я думаю, что это может сработать с Channel, и поэтому я в замешательстве.
Подробнее здесь: https://stackoverflow.com/questions/784 ... difference
Мобильная версия