Как узнать, сколько свободного размера кучи доступно для растрового изображения для Android 2.*?

Наше приложение использует много растровых изображений. Он отлично работает, например, на G1, XOOM. Но в HTC Desire есть ошибка OutOfMemory. В коде мы используем try/catch(OutOfMemoryError e) и все устройства (кроме Desire) выдают исключение, но HTC просто убивает приложение без исключения OOM. Мы ограничили объем памяти для растровых изображений до 12 Мб, и казалось, что это решение решило проблему, но у клиента все еще есть проблема с HTC Desire HD. Есть OOM даже с ограничением в 12 Мб. Вот журналы:

06-07 12:03:43.978 E/dalvikvm-heap( 29616):1140128-byte external allocation too large for this process. 
06-07 12:03:43.978 E/dalvikvm( 29616):Out of memory: Heap Size=12311KB, Allocated=9420KB, Bitmap Size=12139KB, Limit=21884KB
06-07 12:03:43.978 E/dalvikvm( 29616):Trim info: Footprint=15751KB, Allowed Footprint=15751KB, Trimmed=3440KB
06-07 12:03:43.978 E/GraphicsJNI( 29616):VM won't let us allocate 1140128 bytes

AFAIK Существуют различные ограничения размера кучи для устройств (G1: 16 МБ, Droid: 24 МБ, Xoom 48 МБ). На мой взгляд, система должна давать как минимум 16 МБ, но у нас есть ООМ с 12 МБ. Мой вопрос: как узнать, сколько свободного размера кучи доступно для растрового изображения для Android 2.*? Или, пожалуйста, посоветуйте, как избежать такой проблемы другими способами. К вашему сведению, мы не можем использовать меньше растровых изображений, особенно когда оно отлично работает на других устройствах. Заранее благодарю за любую помощь!

2 ответа

Ты можешь попробовать

Runtime.getRuntime().maxMemory();

или метод деятельности

getMemoryInfo(ActivityManager.MemoryInfo;

Кроме того, вы можете переопределить активность

onLowMemory();

метод, в котором вы можете обработать то, что произойдет, когда Activity get получит уведомление о проблеме с памятью, прежде чем его отключить. И вы должны также проверить этот ответ от разработчика Android на памяти Android/Linux.

Это исключение OutOfMemory происходит из-за утечки памяти, а не из самого файла. Вы переопределяете методы жизненного цикла активности, такие как onStop, onResume, onDestroy?

Другие вопросы по тегам