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

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

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

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

02.11.2014, 12:26. Просмотров 426. Ответов 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
Соответственно не знаю как еще можно решить эту проблему не удаляю забивается память удаляю не рисует.
Подскажите может кто-то сталкивался с похожей проблемой ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2014, 12:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нехватка памяти bitmap size exceeds VM budget (Программирование Android):

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

java.lang.OutOfMemoryError: bitmap size exceeds VM budget - Java SE
Программирую под андроид. Ошибка выскакивает здесь: photoArray=new Bitmap; ...

.NET 4.x Нехватка памяти при операции bmp = new Bitmap - C#
Впервые столкнулся с OutOfMemoryException, объясните, пожалуйста, в чём я ошибся, и как исправить private void...

Нехватка памяти - C++
Здравствуйте) пытаюсь выделить память под массив из 15345000 элементов, при запуске выскакивает окно &quot;прекращение работы&quot;. До этого все...

1C 8.x Нехватка памяти - 1С
БГУ 2.0.20.6 Платформа 8.2.15. ОС - Windows Server 2008. При проведении документа &quot;Меню требование&quot; выскакивает ошибка Недостаточно...

Нехватка памяти - Delphi БД
Мужики, помогите! Windows XP, база данных Paradox. Тысяч 5 записей. В Делфи 7 есть два тяжёлых Query,каждый из которых состоит из 15...

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

Нехватка памяти - MS Access
Подскажите пожалуйста почему в access (2003 да и во всех ранее) существуют странные ограничения на память? Нпример при замене символов в...

Mysql + C# = нехватка памяти - C#
Суть проблемы: Имею MySQL в локалке. MySql Connector/Net 6.6.4 Cоздал такой запрос select...

Нехватка виртуальной памяти - Windows XP
Всем привет!) Комп стал глючить при запуске Фотошопа и Оперы пишет что нехватает виртуальной памяти! Объясните что это такое и как...

Нехватка памяти приложения - C (СИ)
Такая вот беда... Компилируется программа, всё нормально, но при запуске прекращает свою работу в неожиданном месте... Путем...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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