В чем разница между consumeAsFlow и receiveAsFlow

«В чем разница между consumeAsFlow и receiveAsFlow» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

consumeAsFlow и receiveAsFlow — оба преобразуют ReceiveChannel в Flow, но работают по-разному:

  1. consumeAsFlow

    • Потребляет канал (после завершения Flow канал закрыт).
    • Подходит для однократного использования.
    channel.consumeAsFlow().collect { ... }  // После коллекции канал закрыт
  1. receiveAsFlow

    • Не потребляет канал (можно использовать многократно).
    • Канал остается открытым, но каждый коллектор получает одни и те же данные.
    channel.receiveAsFlow().collect { ... }  // Канал остается активным

Выбор зависит от сценария:

  • consumeAsFlow — если данные нужны один раз (например, разовая операция).
  • receiveAsFlow — если канал должен жить дольше (например, shared-источник данных).