Канал и общий поток, в чем разницаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Канал и общий поток, в чем разница

Сообщение Anonymous »

Я прочитал несколько статей, пытаясь найти ответ, объясняющий разницу.
  • Цитирую ответ здесь: канал или mutablesharedflow, какой из них является лучшей заменой устаревшего localbroadcastmanager
От Романа Елизарова: Каналы были добавлены как примитив связи между сопрограммами.



Итак, они представили Flow. Но Flow — это холодная наблюдаемость, где каждый подписчик получает свои данные (независимо от других подписчиков). С SharedFlow вы получаете горячую наблюдаемую, которая генерируется независимо от наличия каких-либо подписчиков.
Вы можете сделать то же самое с ConflatedBroadcastChannel. Но JetBrains рекомендует использовать Flow в пользу Channels из-за их более простого API.





Поэтому, если вы хотите перейти на Coroutines и вам нужна горячая наблюдаемая информация, которую могут прослушивать несколько подписчиков, вам следует использовать SharedFlow.


  • Когда вы хотите инкапсулировать свой код, создающий ценность, таким образом чтобы потребителям не приходилось беспокоиться о том, когда он запускается, останавливается или выходит из строя, используйте поток.
  • когда вы хотите передать значения из одну сопрограмму к другой, используйте канал.
Можете ли вы подробнее рассказать об этих примерах? Я немного не понимаю, когда вы хотите инкапсулировать свой код, создающий ценность, чтобы потребителям не приходилось беспокоиться о том, когда он запускается, останавливается или выходит из строя, используйте поток.
Также в в проекте, над которым я работаю, мы используем 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
Ответить

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

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

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

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

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