Android — Проблема с растровым изображением в памяти устройства

#android #canvas #bitmap

Вопрос:

Я использую растровое изображение для рисования более одного рисунка на одном холсте. Скажем, я рисую линии, круги с разными радиусами на одном и том же холсте. Мое требование состоит в том, чтобы добавить 2000 таких холстов в мой вид карты. Изображение выглядит неровным, если я использую разрешение 256×256 в качестве растрового изображения.

Поэтому я использую разрешение 1024×1024 в качестве растрового изображения для лучшего качества. Теперь, когда я запускаю это на устройствах Android с низким объемом памяти, мое приложение зависает и выходит из строя.

Постановка проблемы :

  1. Размер растрового изображения — 1024*1024 = отлично работает на устройствах с большим объемом памяти, таких как устройства one plus, но зависает при низком объеме памяти[менее 4 ГБ]
  2. Размер растрового изображения — 256 * 256 = отлично работает на обоих устройствах Android.

Вот фрагмент кода, используемый в настоящее время для рисования на холсте с помощью растрового изображения.

 Bitmap bitmap = Bitmap.createBitmap(1024, 1024, Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(bitmap);
 

// круг для рисования

  canvas.drawCircle(width/2, height/2, 2, paint);
 

// линия рисования

 canvas.drawLine(cx, cy, x2, y2, paint);
 

// Один и тот же холст с разным радиусом

 canvas.drawArc(endgunRect, startAngle - 90, endSweep, false, paint);
 

Ожидаемое решение :
Мне нужно загрузить около 2000 устройств в представление карты приложения на всех типах устройств Android независимо от емкости хранилища устройств?

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

Комментарии:

1. When I try to load 700 devices on the map view, ??? Загрузочные устройства? На виде карты? Вы еще не говорили о представлении карты? Совершенно непонятно, что вы пытаетесь сделать.

Ответ №1:

Растровое изображение хранится в bitmap heap том, что находится внутри Dalvik heap , и часто вызывает проблемы с памятью при использовании в большем количестве. Я также столкнулся с подобной проблемой, и есть несколько моментов, которые вы можете использовать для обеспечения того, чтобы устройства никогда не выходили из памяти.

  1. Попробуйте уменьшить размер растрового изображения или сделать его динамичным в соответствии с размером устройства.
  2. Повторное использование растрового изображения, все растровые изображения не будут уникальными, поэтому лучше хранить растровые изображения с запятыми в hashmap и повторно использовать их.
  3. Не загружайте все растровые изображения сразу, загружайте только перекрытия, видимые пользователю на экране. Переопределите scroll listener на картах и загружайте больше по мере прокрутки пользователем.
  4. Самое главное — выпускайте растровые изображения, как только они не используются, используя bitmap.release