Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
1ые
1 / 1 / 0
Регистрация: 19.01.2013
Сообщений: 98
#1

Нехватка памяти bitmap size exceeds VM budget - Программирование Android

02.11.2014, 12:26. Просмотров 416. Ответов 4
Метки нет (Все метки)

Доброго времени суток третий день не могу разобраться в проблеме.
У меня для фона использутся изображение при нажатии кнопки открывается игра, при нажатии назад в игре снова открывается стартовое меню с этим фоном при открыти главного меню загружаю изображение таким образом:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
ArrayList<BitmapDrawable> DrawList;
DrawList = new ArrayList<BitmapDrawable>();
 
        LinearLayout L = (LinearLayout)findViewById(R.id.startlayout);
        DrawList.add(decodeSampledBitmapFromResource(getResources(),R.drawable.a,getResources().getDisplayMetrics().widthPixels,getResources().getDisplayMetrics().heightPixels));
L.setBackgroundDrawable(DrawList.get(0));
Вот код метода.
public static BitmapDrawable decodeSampledBitmapFromResource(Resources res,int id,int reqWidth, int reqHeight)
    {
 
        // First decode with inJustDecodeBounds=true to check dimensions
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(res, id, options);
        final int height = options.outHeight;
        final int width = options.outWidth;
 
        // Calculate inSampleSize
        int inSampleSize = 1;
        if (height > reqHeight || width > reqWidth) {
 
            final int halfHeight = height / 2;
            final int halfWidth = width / 2;
 
            // Calculate the largest inSampleSize value that is a power of 2 and keeps both
            // height and width larger than the requested height and width.
            while ((halfHeight / inSampleSize) > reqHeight
                    && (halfWidth / inSampleSize) > reqWidth) {
                inSampleSize *= 2;
            }
        }
        options.inSampleSize = inSampleSize;
 
        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;
        return new BitmapDrawable(res,BitmapFactory.decodeResource(res, id, options));
    }
При открытии главного меню в 5 или 6-1 раз по кнопке назад
Java
1
2
3
4
5
6
7
8
9
@Override
    public void onBackPressed() {
        intent = new Intent(this,Satrt_activity.class);
        intent.putExtra("kolx",kolx);
        intent.putExtra("koly",koly);
        intent.putExtra("mode",mode);
        startActivity(intent);
        return;
    }
Вылетаеть с ошибкой гуглил искал решил что нужно освобождать память добавил в код кнопок(те кнопки которые переключают в другой активити) код
Java
1
2
DrawList.get(0).getBitmap().recycle();
       DrawList.clear();
Теперь вылетает java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@b64235b0
Соответственно не знаю как еще можно решить эту проблему не удаляю забивается память удаляю не рисует.
Подскажите может кто-то сталкивался с похожей проблемой ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2014, 12:26     Нехватка памяти bitmap size exceeds VM budget
Посмотрите здесь:

Очистка памяти Bitmap - Программирование Android
В фрагменте динамически создаются ImageView, после закрытия фрагмента они все исчезают, нужно ли в коде всякие recycle делать чтобы...

Максимальный heap size - Программирование Android
Сдраствуйте, наткнулся на то что память в андроиде очень ограничена (еще и от девайса к девайсу) и получается что я не могу работать с...

How to set text size and layout according resolution and dpi - Программирование Android
Hi, Please tell me that How to set text size and layout according resolution and dpi?

Bitmap трансформация - Программирование Android
Здрасте) Как можно трансформировать bitmap? Т.е. у меня есть картинка, которую я загружаю, и мне её надо сжать один край, из...

Bitmap, resize - Программирование Android
При ресайзе bitmap теряет &quot;резкость&quot; по контуру изображения, появляется пикселизация. Есть способы обойти это? Ресайзю bitmap путем...

создание Bitmap - Программирование Android
столкнулся с такой проблемой: есть в drawable imge.jpg , делаю в классе class MClass extends View Bitmap bm1 =...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
03.11.2014, 18:25     Нехватка памяти bitmap size exceeds VM budget #2
1ые, добрый день!
Вы достаточно хорошо описали проблему. Налицо утечки памяти. Вообще, при работе с графическими ресурсами рекомендуют уменьшать размер картинок, но здесь другая ситуация. Вы заполняете массив изображений, а при нажатии кнопки "Назад" вызываете другую активность вместо банального finish. В итоге массив не очищается, а стек активностей растёт. Может, я и ошибаюсь.
1ые
1 / 1 / 0
Регистрация: 19.01.2013
Сообщений: 98
03.11.2014, 22:51  [ТС]     Нехватка памяти bitmap size exceeds VM budget #3
Спасибо учту. Все еще в поисках решения. В свое время искал информацию по кнопке выхода из приложения и заметил что большинство вообще советуют не использовать метод finish().
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
03.11.2014, 23:03     Нехватка памяти bitmap size exceeds VM budget #4
1ые, не за что. Метод finish использовать как раз безопасно для завершения текущей activity. Вот выход из приложения завершением процесса использовать не рекомендуется.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2014, 03:44     Нехватка памяти bitmap size exceeds VM budget
Еще ссылки по теме:

RelativeLayout и Bitmap - Программирование Android
Можно ли поставить на задний фон RelativeLayout Bitmap. Или преобразовать Bitmap в Drawable? P.S. Именно Bitmap, а не BitmapDrawable/

Bitmap & BitmapFactory - Программирование Android
Вопрос к бывалым. У меня в метод передается параметр Byte data и дальше я из этого массива байт пытаюсь сделать битмап bitmap =...

Отличия drawable от Bitmap - Программирование Android
Чем отличается drawable от Bitmap?

Неверный размер Bitmap'a - Программирование Android
Всем привет! Загружаю картинку размером 1920х1080: bmp = BitmapFactory.decodeResource(getResources(), R.drawable.bmp); Затем вывожу...

Не создаёт Bitmap из ресурса - Программирование Android
Android только-только начал осваивать - не пинайте, пожалуйста, если вопрос тривиальный. Имею Android Studio 1.5.1 и некий проект. Есть...

Поворот Bitmap изображения - Программирование Android
Здравствуйте. Есть изображения Bitmap. вывожу их на канвас с помощью canvas.drawBitmap(bitmap, x, y, null). Нужно вывести эти изображения с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1ые
1 / 1 / 0
Регистрация: 19.01.2013
Сообщений: 98
04.11.2014, 03:44  [ТС]     Нехватка памяти bitmap size exceeds VM budget #5
Проблему решил, все оказалось как раз из за того что неправильно реализовал переходы между активити
Yandex
Объявления
04.11.2014, 03:44     Нехватка памяти bitmap size exceeds VM budget
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru