Самый экономичный способ масштабирования растровых изображений для живых обоев? - PullRequest
1 голос
/ 09 декабря 2010

Я не верю, что этот вопрос ограничен живыми обоями, но это тот случай использования, с которым я пытаюсь работать.

У меня есть растровое изображение 256 x 256, созданное как «плитка» для моих живых обоев. Я ищу эффективный способ памяти масштабировать это, чтобы соответствовать всему экрану устройства. Я продолжаю сталкиваться с проблемами "превышения памяти ВМ" всякий раз, когда устройство вращается вперед и назад, что говорит о том, что я не решаю проблему правильно.

Изображение рисуется методом Canvas drawBitmap(). Я пробовал следующие варианты:

  1. Создайте растровое изображение, затем вызовите createScaledBitmap()
  2. Создайте растровое изображение, затем вызовите scale() на моем холсте
  3. Создайте растровое изображение, затем создайте матрицу, чтобы «растянуть» ширину и высоту, и примените ее с preScale()

Если я позвоню recycle(), живые обои запускаются на один кадр, а затем вылетает. Если я вообще не поворачиваю устройство, я не получаю сбоев памяти.

Спасибо за любые предложения!

1 Ответ

2 голосов
/ 09 декабря 2010

Когда вы вращаетесь, вы препятствуете перезагрузке приложения, как это делают большинство приложений для Android? Если он «перезапускается» (не уверен в терминологии от руки), это заставит вас снова создать изображение. Вполне вероятно, что предыдущее изображение еще не было собрано, поэтому вам не хватает памяти. Что вы должны сделать, это убедиться, что приложение не «перезагружается» (я запомню правильную формулировку) при повороте, и это свойство приложения, я считаю. Затем вы перехватываете событие поворота и обрабатываете изменение ориентации чертежа без выделения каких-либо новых объектов.

Надеюсь, это имеет смысл.

...