React Navigation: тяжёлые вкладки и память
Вопрос
В приложении пять вкладок, каждая с тяжёлой лентой и видео. После обхода всех вкладок растёт память и греется телефон. Что важно понимать о жизненном цикле вкладок?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Вкладки размонтируются автоматически при переключении, значит утечка точно не из-за навигации
- Нужно обернуть каждую вкладку в
ScrollView, тогда неактивные выгружаются - Посещённые вкладки остаются смонтированными; эффекты нужно останавливать по потере фокусаправильный ответ
- Вкладки рендерятся в отдельных JS-потоках, и остановить их работу нельзя
Разбор
По умолчанию вкладка монтируется при первом посещении (lazy) и потом остаётся смонтированной, чтобы сохранить состояние. Видео, таймеры, подписки в ней продолжают работать. Поэтому побочные эффекты привязывают к фокусу. Конкретные опции размонтирования отличаются между версиями React Navigation, суть одна: держать в памяти неактивных вкладок только то, что нужно. JS-поток один на всё приложение.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.