Android png изображения большие в памяти

У меня есть приложение в Android с расширением imageflipper. Проблема в том, что после загрузки в память примерно 8 изображений я получаю сообщение об ошибке нехватки памяти.

Ну, я попытался сделать динамическую загрузку изображений, так что если пользователь перевернет 2 изображения, я загружу следующие 2 в память и удалю 2 первых. Вроде работает, но некрасиво, и у меня возникают проблемы, когда пользователь переворачивает изображения назад (imageflipper.showprevious()).

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

У меня вопрос:
Есть ли лучший способ сделать такие вещи? Изменение размера изображений не очень помогло.


person taivo    schedule 10.07.2012    source источник


Ответы (2)


Я использовал приведенный ниже фрагмент кода для решения проблем, связанных с памятью. Мы можем решить эту проблему с помощью метода isRecycled(). Добавьте этот код к своему, здесь finalImage — это мой BitmapDrawable, а R.id.image_viewer — мой образ, вы можете изменить его на свой

 @Override
        protected void onDestroy() {

             finalImage.setCallback(null);
             if (!((BitmapDrawable) finalImage).getBitmap().isRecycled()) {
             ((BitmapDrawable) finalImage).getBitmap().recycle();
             }
             finalImage = null;
            unbindDrawables(findViewById(R.id.image_viewer));
            Runtime.getRuntime().gc();
            // scaledBitmap.recycle();
            System.gc();
            super.onDestroy();
        }

        private void unbindDrawables(View view) {
            if (view.getBackground() != null) {
                view.getBackground().setCallback(null);
            }
            if (view instanceof ViewGroup) {
                for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
                    unbindDrawables(((ViewGroup) view).getChildAt(i));
                }
                ((ViewGroup) view).removeAllViews();
            }
        }
person Aerrow    schedule 10.07.2012

Используйте BitmapFactory.Options.

BitmapFactory.Options opts = new BitmapFactory.Options();
opt.inSampleSize = 2;
//this will decrease bitmap size,
// but also affect quality of the image, 
//so just play with this value to spot the good one;
Bitmap b = BitmapFactory.decodeFile(fileName, opts);
person Korniltsev Anatoly    schedule 10.07.2012