Выбор ответа Senior Нативные модули обновлено
Потоки в нативном модуле
Вопрос
Нативный метод compressVideo на Android выполняется в потоке, где его вызвал модуль, и длится 20 секунд. Пользователь жалуется на «Приложение не отвечает». Что исправить?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Сжимать в фоновом потоке и разрешить промис по готовности. Если долгая работа идёт на главном потоке платформы, система показывает ANR.
Варианты ответа
- Сделать метод синхронным, чтобы JS дождался результата и не нагружал натив
- Увеличить таймаут ANR в манифесте приложения до минуты
- Сжимать в фоновом потоке и разрешить промис по готовностиправильный ответ
- Вызывать метод из
setTimeoutв JS, чтобы он выполнился асинхронно
Разбор
Если долгая работа идёт на главном потоке платформы, система показывает ANR. Решение: перенести работу в фон и вернуть результат через Promise. Синхронный метод заблокирует ещё и JS-поток. Таймаут ANR приложение настроить не может. setTimeout в JS лишь откладывает вызов, а натив всё равно выполнит его в том же потоке.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.