Android-студия выдает OutOfMemoryError в Viewflipper - PullRequest
0 голосов
/ 11 октября 2018

Я использую ViewFlipper для динамического отображения изображений с использованием массива.Количество изображений около 100. Когда я запускаю это действие, приложение останавливается с ошибкой java.lang.OutOfMemoryError:.Размер объединенного изображения составляет около 7 МБ.Что нужно сделать, чтобы отобразить все изображения?Ниже приведен код Java, который я использую.

ViewFlipper viewflipper;
int result_images[]= 
{R.drawable.resultone,R.drawable.resulttwo,R.drawable.resultthree,
...,R.drawable.resultonehundredsixteen};

viewflipper = (ViewFlipper) findViewById(R.id.viewflipper);
for(int i=0;i<result_images.length;i++)
{
    //  This will create dynamic image view and add them to ViewFlipper
    setFlipperImage(result_images[i]);
}

viewflipper.startFlipping();

private void setFlipperImage(int res) {
    Log.i("Set Filpper Called", res+"");
    ImageView image = new ImageView(getApplicationContext());
    image.setBackgroundResource(res);
    viewflipper.addView(image);
}

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Каждое из этих изображений будет занимать 1228800 байт пространства кучи (640 x 480 x 4 байта / пиксель), что немного больше 1 МБ.100 из них будут занимать ~ 120 МБ пространства кучи.На многих устройствах Android у вас не так много места в куче, а ViewFlipper требует предварительной загрузки всех этих изображений.

Вам необходимо изменить свой подход, напримерчто вы можете избежать наличия только нескольких из этих изображений в памяти одновременно.Как минимум, для этого потребуется переключиться с ViewFlipper на что-то другое, для чего не требуется предварительно загружать все (например, использовать AdapterViewFlipper).

Плюс, вам нужно будет поместить эти изображения в res/drawable-anydpi/ или res/drawable-nodpi/.Я предполагаю, что они у вас есть где-то еще (например, res/drawable/), и в этом случае их потребление памяти существенно возрастет на устройствах с высоким разрешением.

0 голосов
/ 11 октября 2018

Не используйте viewflipper, используйте viewpager from android.support.v4.Посмотрите на следующий пример , как использовать viewpager с адаптером.Более подробную информацию можно найти в следующем блоге post .

Взгляните на следующую статью .Вам нужно масштабировать изображения и располагать их соответствующим образом.7 мегабайт - это размер сжатых изображений.Растровые изображения занимают гораздо больше места.

Вы также можете попробовать и использовать библиотеку Picasso или glide для эффективной обработки изображений.

...