Выбор ответа Senior Навигация обновлено

React Navigation: тяжёлые вкладки и память

Вопрос

В приложении пять вкладок, каждая с тяжёлой лентой и видео. После обхода всех вкладок растёт память и греется телефон. Что важно понимать о жизненном цикле вкладок?

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

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

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

Коротко

Правильный ответ: Посещённые вкладки остаются смонтированными; эффекты нужно останавливать по потере фокуса. По умолчанию вкладка монтируется при первом посещении (lazy) и потом остаётся смонтированной, чтобы сохранить состояние.

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

  1. Вкладки размонтируются автоматически при переключении, значит утечка точно не из-за навигации
  2. Нужно обернуть каждую вкладку в ScrollView, тогда неактивные выгружаются
  3. Посещённые вкладки остаются смонтированными; эффекты нужно останавливать по потере фокусаправильный ответ
  4. Вкладки рендерятся в отдельных JS-потоках, и остановить их работу нельзя

Разбор

По умолчанию вкладка монтируется при первом посещении (lazy) и потом остаётся смонтированной, чтобы сохранить состояние. Видео, таймеры, подписки в ней продолжают работать. Поэтому побочные эффекты привязывают к фокусу. Конкретные опции размонтирования отличаются между версиями React Navigation, суть одна: держать в памяти неактивных вкладок только то, что нужно. JS-поток один на всё приложение.

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

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