размер растрового изображения превышает бюджет виртуальной машины ошибка Android
Когда я переключаюсь в альбомный режим, несколько объектов создаются с растровым изображением во весь экран.
При прокрутке вызывается другой объект и отображается его растровое изображение, когда я делаю это повторно, размер растрового изображения превышает vm
ошибка бюджета, я сделал все, что нужноrecycle()
, установил null и затем вызвал 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;
Переведено автоматически
Ответ 1
У меня также была такая же проблема в OOME из-за bitmaps.
При изменении ориентации с КНИЖНОЙ на АЛЬБОМНУЮ и наоборот, предыдущий пользовательский интерфейс полностью отбрасывается, и загружается и отображается новый пользовательский интерфейс, В этом случае, если вы используете много растровых изображений в своем приложении, вам необходимо разместить их в нужных местах.
Чтобы проверить ориентацию вашего устройства, пожалуйста, ознакомьтесь с этим: Проверьте ориентацию на телефоне 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?
Если я узнаю больше информации, я обновлю этот пост.
Пожалуйста, обновите свой пост, если вы получите решение вашей проблемы.
Спасибо :)