Выбор ответа Senior Производительность обновлено

Flutter: память при показе фото

Вопрос

Лента показывает миниатюры 100x100 из фотографий 4000x3000, приложение потребляет много памяти. Что помогает?

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

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

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

Коротко

Правильный ответ: cacheWidth/cacheHeight: декодировать сразу в нужном размере. Декодированное изображение занимает ширина x высота x 4 байта: 4000x3000 это около 48 МБ на одну картинку, независимо от размера на экране. cacheWidth задаёт размер декодирования, и миниатюра займёт килобайты.

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

  1. FilterQuality.none, чтобы Flutter не хранил сглаженную копию изображения
  2. Обернуть картинку в ClipRRect, тогда в памяти останется только видимая часть
  3. Загружать фото через compute, чтобы декодирование шло в отдельном изоляте
  4. cacheWidth/cacheHeight: декодировать сразу в нужном размереправильный ответ

Разбор

Декодированное изображение занимает ширина x высота x 4 байта: 4000x3000 это около 48 МБ на одну картинку, независимо от размера на экране. cacheWidth задаёт размер декодирования, и миниатюра займёт килобайты. Качество фильтрации и обрезка не меняют размер в памяти. Декодирование и так идёт вне UI-потока, проблема не в нём.

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

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