Android ТВ Leanback лучшее место для загрузки изображений значков, чтобы уменьшить объем памяти - PullRequest
0 голосов
/ 14 апреля 2020

Я создал приложение для Android телевизора, используя Leanback. Я использую BrowseSupportFragment, и мои элементы отображаются классом CardPresenter, который реализует класс Presenter. Я загружаю изображения в методе onBindViewHolder для иконок. Но он загружает слишком много изображений в память, я проверил Logcat, что общее количество загруженных изображений слишком много (в основном загружается около 54 строк, и в каждой строке по 10-12 карт). Это вызывает g c паузы в приложении. То, что я хочу, это загрузить только видимые изображения. попытался использовать метод onViewAttachedToWindow из класса Presenter, но метод onBindViewHolder & onViewAttachedToWindow, кажется, вызывается одинаковое количество раз. Что я хочу сделать, так это загружать изображения лениво, когда списки прокручиваются, много раз пытались найти, но не могли найти правильный ответ. Может ли кто-нибудь помочь мне с этим?

1 Ответ

1 голос
/ 15 апреля 2020

onBindViewHolder - правильное место для запуска загрузки изображения. Когда ваш макет раздут, вы должны увидеть, что onBindViewHolder вызывается для всех видимых элементов, иногда с буфером для следующего элемента, в зависимости от обрезки. Если вы видите, что onBindViewHolder вызывается значительно чаще, чем имеет смысл (например, вы видите 20 элементов на экране, но он вызывается 100 раз), то вам следует убедиться, что макеты имеют заданный размер.

Например, если вы отображаете карты, а ширина карты не устанавливается до тех пор, пока изображение не будет загружено, ваша ширина может фактически составлять 0, поэтому каждая карта в этом ряду связана, что вызывает запросы на изображения. ImageCardView имеет вспомогательный метод setMainImageDimensions для установки LayoutParams, поэтому вы можете вызывать его либо в onCreateViewHolder (если размер одинаков для всех элементов), либо в onBindViewHolder (если размер зависит от элемента).

...