Вопрос по android, java – размер растрового изображения превышает Vm бюджет ошибки Android

6

Когда я переключаюсь в ландшафтный режим, несколько объектов создаются с растровым изображением на весь экран.

Когда я прокручиваю, вызывается другой объект, и отображается его растровое изображение. При повторном выполнении размер растрового изображения превышаетvm ошибка бюджета, я сделал все, что угодноrecycle()установить ноль и затем вызватьGC()-а еще у меня такая же ошибка. создание растрового изображения ....

    bitmap = Bitmap.createBitmap(ChartProperties.getChartWidth(), 
                    ChartProperties.getChartHeight(),
    Bitmap.Config.RGB_565);

    imageCache.put(String.valueOf(LandscapeChartActivity.getActiveFeature()),
                    new SoftReference(bitmap));

    if(imageCache != null){

        for (int i = 0; i < imageCache.size(); i++) {

            if (imageCache.get(String.valueOf(i)) != null) {
                imageCache.get(String.valueOf(i)).get().recycle();
                imageCache.put(String.valueOf(i), null);                    
            }

        }
        Runtime.getRuntime().gc();
        imageCache.clear();
        imageCache = null;
возможный дубликатOutOfMemoryError: bitmap size exceeds VM budget :- Android Sergey Glotov
Каждый раз, когда вы звонитеsize() в петле Бог убивает котенка ... WarrenFaith

Ваш Ответ

1   ответ
7

У меня тоже была такая же проблема OOME из-за растровых изображений.

Когда ориентация изменяется с ПОРТРЕТА на ЛАНДШАФТ и наоборот, предыдущий пользовательский интерфейс полностью отбрасывается, а новый пользовательский интерфейс загружается и отображается. В этом случае, если вы используете в своем приложении много растровых изображений, вам необходимо освободить их в соответствующих местах.

Чтобы проверить ориентацию вашего устройства, пожалуйста, посмотрите это:Проверьте ориентацию на телефоне Android

В вашем случае вам нужно очистить растровые изображения во время изменения ориентации.

По вышеуказанной ссылке вы можете узнать, как получить текущую ориентацию. Поэтому при каждом изменении ориентации вызывайте приведенный выше код, который очищает растровые изображения.

Теперь, когда мы проверяем logcat, всегда появляется журнал, говорящий GC_, но я не мог этого понять, поэтому Я нашел удивительный документ по проблеме утечки памяти:http://codelog.dexetra.com/getting-around-android-memory-blues

Приведенная выше ссылка очень полезна для вашей проблемы.

Теперь OOME возникает, когда в вашем приложении есть утечка памяти. Поэтому, чтобы проверить это, пожалуйста, установите MAT для eclipse. Вы можете найти его по адресу:http://www.eclipse.org/mat/downloads.php

Это немного сложное программное обеспечение, но по мере его изучения вы поймете, что это довольно полезное программное обеспечение.

Даже если это не решит вашу проблему, используйтеWeakReference для растровых изображений.

Пожалуйста, обратитесь по этой ссылке:Как использовать WeakReference в разработке Java и Android?

Если я узнаю больше информации, я обновлю этот пост.

Пожалуйста, обновите свой пост, если вы получите решение вашей проблемы.

Спасибо :)

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededenter code hereError: User Rate Limit Exceeded Mihir Shah

Похожие вопросы