Выбор ответа Senior Нативные модули обновлено

Потоки в нативном модуле

Вопрос

Нативный метод compressVideo на Android выполняется в потоке, где его вызвал модуль, и длится 20 секунд. Пользователь жалуется на «Приложение не отвечает». Что исправить?

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

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

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

Коротко

Правильный ответ: Сжимать в фоновом потоке и разрешить промис по готовности. Если долгая работа идёт на главном потоке платформы, система показывает ANR.

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

  1. Сделать метод синхронным, чтобы JS дождался результата и не нагружал натив
  2. Увеличить таймаут ANR в манифесте приложения до минуты
  3. Сжимать в фоновом потоке и разрешить промис по готовностиправильный ответ
  4. Вызывать метод из setTimeout в JS, чтобы он выполнился асинхронно

Разбор

Если долгая работа идёт на главном потоке платформы, система показывает ANR. Решение: перенести работу в фон и вернуть результат через Promise. Синхронный метод заблокирует ещё и JS-поток. Таймаут ANR приложение настроить не может. setTimeout в JS лишь откладывает вызов, а натив всё равно выполнит его в том же потоке.

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

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