ScrollingCache?

Может кто-нибудь объяснить значение scrolling cache в Android. Я наткнулся на это слово, но не смог найти объяснения ни на официальном сайте Android, ни в Интернете.

Все, что я мог найти, это как включить/выключить его.

Спасибо.

Ответ 1

Прокрутка кеша - это в основном кеш чертежа.

В android вы можете попросить View сохранить свой чертеж в кеше, называемом кэшем рисования (в основном растровым). По умолчанию кеш чертежа отключен, так как он занимает память, но вы можете попросить View явно создать его либо через setDrawingCacheEnabled, либо через аппаратные уровни (setLayerType).

Так почему это полезно? Поскольку использование кэша чертежа делает вашу анимацию гладкой по сравнению с перерисовкой вида в каждом кадре.

Этот тип анимации также может быть аппаратным ускоренным, поскольку система рендеринга может принимать это растровое изображение и загружать его на графический процессор в качестве текстуры (при использовании аппаратных уровней) и выполнять быстрые манипуляции с матрицами (например, изменять альфа, переводить, вращать). Сравните это с анимацией, если вы перерисовываете (onDraw получает вызов) на каждом кадре.

В случае списка, когда вы прокручиваете, бросая, вы по существу оживляете представления своего списка (перемещая их вверх или вниз). В listview используется кеш чертежа его видимых дочерних элементов (и некоторые потенциально видимые дети рядом с краями), чтобы оживить их очень быстро.

Есть ли недостаток в использовании кэша чертежей? Да, он потребляет память, поэтому по умолчанию она отключена в режиме просмотра. В случае с ListView кеш автоматически создается для вас, как только вы прикасаетесь к ListView и немного передвигаетесь (чтобы отличить кран от прокрутки). Другими словами, как только ListView думает, что вы собираетесь прокручивать/бросать, он создаст кэш прокрутки, чтобы вы могли оживить движение прокрутки/броска.

Ответ 2

scrollingCache подробно объясняется в лекции "мира listView".

Он в основном кэширует прокрутку, так что он будет перемещать растровое изображение, но, по моему опыту, он на самом деле делает вещи намного медленнее и занимает память ни для чего особенного.

scrollingCache включен по умолчанию, по крайней мере для listView. Поэтому, если производительность важна для вас, вам следует отключить ее.

Ответ 3

Я думаю, вы говорите о следующем:

Представьте список из 50 элементов, в которых видны только 10 элементов. Android будет кэшировать следующую и предыдущую (оценку) 5 элементов в элементе списка.

Когда вы начинаете прокручивать список, он будет повторно использовать невидимые представления элементов, используя функцию ArrayAdapter getView() Например, если вы прокручиваете вверх, он будет смотреть снизу и помещать его сверху с новыми данными.

Таким прокручивающим кешем являются следующие и предыдущие элементы выше/под видимыми элементами.