несколько растровых изображений против рисунков - влияние на производительность и память

Как вы можете видеть на скриншоте, я показываю эскизы в ListView слева. Эти большие пальцы генерируются асинхронно. В любом случае, результатом для каждой строки/элемента является новый Bitmap.

управление скалодромом

Но мне интересно, является ли это лучшей практикой. Это потому, что очень часто фоновое изображение (стенка для скалолазания) одно и то же. Поэтому я мог бы сгенерировать LayeredDrawable, состоящий из растрового изображения фона, одинакового для каждой строки, и собственной реализации Drawable, которая затем рисует маршрут восхождения в своем методе draw(Canvas).

Вариант 1: создать новое растровое изображение для каждой строки/элемента.

Вариант 2: используйте LayeredDrawable с фоновым растровым изображением и динамическим Drawable.

Какой вариант лучше с точки зрения использования памяти и процессора?


person Matthias    schedule 14.05.2014    source источник
comment
Для памяти я бы предположил, что вариант № 2 лучше. Для ЦП я бы предположил, что вариант № 1 лучше, так как вариант № 2 делает все, что делает вариант № 1, плюс дополнительное рисование.   -  person CommonsWare    schedule 14.05.2014
comment
Я проанализировал память, и каждая миниатюра выделяет около 307 000 байт, в то время как логично для одного маршрута восхождения (линии), включая все точки линии, выделяется примерно 700 байт в зависимости от количества точек. Огромная разница!   -  person Matthias    schedule 14.05.2014


Ответы (1)


Для своих целей я использую пользовательский рисунок и BitmapDrawable в LayerDrawable. Растровое изображение является фоном, а пользовательский рисунок рисует линию и удерживает. Если базовые данные нарисованной линии изменяются, я устанавливаю грязный флаг, чтобы рисуемый объект перерисовывался в следующем цикле.

person Matthias    schedule 19.08.2014