Рывки в ленте: поиск причины на любой платформе
Вопрос
Лента в приложении дёргается на скролле на средних Android-устройствах. Как будете искать и устранять причину?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Воспроизвести на целевом устройстве, релизная сборка, метрика jank
Трассировка (Perfetto, System Trace): главный поток или рендеринг
Типичные причины: декодирование картинок, тяжёлая раскладка, лишние перерисовки, GC
Исправления: фоновая подготовка данных, стабильные ключи, кеш размеров, пулы
Проверка улучшения той же метрикой и защита от регрессии
Что могут спросить следом
- Как найти лишние рекомпозиции в Compose?
- Чем поможет JankStats?
Разбор
Воспроизвожу на устройстве того класса, где жалуются, в релизной сборке, и фиксирую метрику: процент медленных кадров. Снимаю трассу Perfetto или System Trace во время скролла и смотрю, что выходит за бюджет кадра: работа на главном потоке или поток рендеринга. Частые причины: декодирование больших картинок, тяжёлая раскладка вложенных контейнеров, лишние перерисовки элементов из-за нестабильных параметров или отсутствия ключей, сборка мусора из-за массовых аллокаций в onBind или в композиции. Исправляю точечно: картинки нужного размера и декодирование в фоне, стабильные ключи и неизменяемые модели, вычисления вне отрисовки. Проверяю той же метрикой, а в CI добавляю Macrobenchmark скролла, чтобы регрессия не вернулась.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.