PlayN Android 2.3.x OutOfMemory

В нашем приложении у нас много изображений. Когда они нужны, мы получаем их таким образом: PlayN.assets().getImage("imageURL");

В Android 2.3 есть ограничение на 24 МБ растровых ресурсов. Итак, при показе изображений на Экране 2 (скажем, Игра) я должен скрыть (выгрузить) изображения с Экрана 1 (скажем, Вступление). У меня есть ссылка на изображение из Screen1, и я могу вызвать метод clear(): CanvaseImage referenceToImage - мне нужно выгрузить, referenceToImage.canvas().clear();

НО, - таким образом, не выгружайте изображение из памяти Android в 2.3.x - ( Android: Bitmap recycle() как это работает?... в этом посте говорится, что я должен вызвать recycle() для растрового изображения, поскольку растровые изображения хранятся в неуправляющей памяти и не могут быть сжаты оттуда с помощью GC.)

а у меня такой stackTrace для андроида если картинки с Screen1 не выгружаются из памяти:

06-11 09:16:45.197: E/AndroidRuntime(23621): FATAL EXCEPTION: GLThread 
10 
06-11 09:16:45.197: E/AndroidRuntime(23621): 
java.lang.OutOfMemoryError: bitmap size exceeds VM budget(Heap 
Size=9479KB, Allocated=6032KB, Bitmap Size=23347KB) 
06-11 09:16:45.197: E/AndroidRuntime(23621):    at 
android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
06-11 09:16:45.197: E/AndroidRuntime(23621):    at 
android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:694) 
06-11 09:16:45.197: E/AndroidRuntime(23621):    at 
playn.android.AndroidAssets.decodeBitmap(AndroidAssets.java:158) 
06-11 09:16:45.197: E/AndroidRuntime(23621):    at 
playn.android.AndroidAssets.doGetImage(AndroidAssets.java:79) 
06-11 09:16:45.197: E/AndroidRuntime(23621):    at 
playn.core.AbstractAssets.getImage(AbstractAssets.java:39) 

Есть ли способ вызвать магию playN для переработки растровых изображений в модели памяти Android 2.3.x?


person Oleg Dmytriienko    schedule 19.06.2012    source источник


Ответы (2)


Вы уже ознакомились с статьей Google об управлении памятью? Они действительно дают довольно подробное объяснение того, как решить эту проблему с растровыми изображениями.

person MikeIsrael    schedule 19.06.2012

почему вы не используете LruCache для кэширования растровых изображений? см. статью здесь

person Buda Gavril    schedule 19.06.2012