2012-06-19 53 views
1

在我们的应用程序中,我们有很多图像。当他们需要我们得到他们在 这样的方式:PlayN.assets().getImage("imageURL");PlayN Android 2.3.x OutOfMemory

在android 2.3中有24MB的位图资源的限制。所以,虽然 显示屏幕2上的图像(比方说游戏),我必须隐藏(卸载)来自Screen1的图像 (让我们说介绍)。 我从屏蔽1具有参考图像,我可以调用clear()方法: CanvaseImage referenceToImage - 我需要卸载, referenceToImage.canvas().clear();

,但是 - 这种方式在Android内存在2.3.x版本不卸载图像 - (Android: Bitmap recycle() how does it work? ... 这篇文章告诉我应该叫位图的循环(),因为位图 存储在非管理内存,并不能由 GC可以从那里收缩。)

和我有这样的堆栈跟踪android如果屏幕1的图像不是 从内存中卸载:

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版本的内存模型回收位图?

回答

1

你已经看过关于内存管理的Google article吗?他们真的给出了一个相当深入的解释如何处理该位图问题。