1

在我们的应用程序中,我们有很多图像。当他们需要时,我们以这种方式获得他们:PlayN.assets().getImage("imageURL");

在 android 2.3 中有 24mb 的位图资源限制。因此,在 Screen2 上显示图像(比如说游戏)时,我必须从 Screen1 中隐藏(卸载)图像(比如说介绍)。我参考了 Screen1 中的图像,我可以调用 clear() 方法:CanvaseImage referenceToImage - 我需要卸载, referenceToImage.canvas().clear();

但是, - 这种方式不要在 2.3.x 中从 android 内存中卸载图像 - (Android: Bitmap recycle() 它是如何工作的? ...这篇文章告诉我应该在位图上调用 recycle(),因为位图存储在非管理内存,不能被 GC 从那里缩小。)

如果来自 Screen1 的图像没有从内存中卸载,我有这样的 android 堆栈跟踪:

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 内存模型中回收位图的魔法吗?

4

2 回答 2

1

您是否已经看过有关内存管理的Google 文章?他们确实对如何处理该位图问题进行了相当深入的解释。

于 2012-06-19T07:37:31.023 回答
1

为什么不使用LruCache缓存位图?看这里的文章

于 2012-06-19T07:37:58.527 回答