Выбор ответа Senior Платформенные каналы обновлено

Flutter: тяжёлая работа в обработчике канала

Вопрос

Нативный обработчик MethodChannel на Android сжимает видео 10 секунд прямо в обработчике. Что будет?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Главный поток платформы заблокирован: ввод не обрабатывается, возможен ANR. Обработчики каналов по умолчанию выполняются в главном потоке платформы.

Варианты ответа

  1. Ничего страшного: Flutter автоматически выполняет обработчики каналов в фоновом потоке
  2. Главный поток платформы заблокирован: ввод не обрабатывается, возможен ANRправильный ответ
  3. Заблокируется только Dart-изолят, ожидающий ответа, а платформа продолжит работать
  4. Канал сам вернёт ошибку по тайм-ауту через 5 секунд и освободит поток

Разбор

Обработчики каналов по умолчанию выполняются в главном потоке платформы. Долгая работа там блокирует этот поток, что на Android ведёт к ANR. Правильно уйти в фоновый поток (корутины, executor) или использовать фоновую очередь задач канала (TaskQueue) и ответить через result, когда работа готова. Автоматического фона и тайм-аутов у каналов нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.