gpt4 book ai didi

安卓开发 : Bitmaps on surfaceview leak Memory or too big?

转载 作者:行者123 更新时间:2023-11-29 22:21:54 25 4
gpt4 key购买 nike

我的游戏使用 surfaceview(我知道我应该使用 GL)。我为我的游戏角色世界控件绘制了很多位图等等。当我打开我的 LogDog 时,我遇到了这个:

08-05 10:17:29.151: ERROR/dalvikvm(24048): Out of memory: Heap Size=5379KB, Allocated=2735KB, Bitmap Size=20576KB, Limit=32768KB

不知道是漏电还是什么

我的分配跟踪器显示:

喜欢 30:

138 96  char[]  9   android.content.res.AssetManager    getCookieName   

然后吨:

32  80  android.graphics.BitmapFactory$Options  9   android.graphics.BitmapFactory  decodeResource  

最后:喜欢 30:

141 56  android.graphics.Bitmap 9   android.graphics.BitmapFactory  nativeDecodeAsset   

还有一些类似的。

这是一些我认为会耗尽我内存的代码:

player = BitmapFactory.decodeResource(getResources(), R.raw.ghostright);
world = BitmapFactory.decodeResource(getResources(), R.raw.lvl2);
thumb = BitmapFactory.decodeResource(getResources(), R.raw.thumb);

resized = Bitmap.createScaledBitmap(player, width/10, width/6, false);
player = resized;


resized = Bitmap.createScaledBitmap(world, height*10, height, false);
world = resized;


resized = Bitmap.createScaledBitmap(thumb, height/6, height/6, false);
thumb = resized;

我听说我应该使用resycle,但我不知道在哪里,因为我总是使用位图

//西蒙PS:我真的需要帮助-.-

最佳答案

我在 SurfaceView 上也使用了很多位图,没有这个问题。对于动画 Sprite ,您可以使用 Sprite 表,而不是逐帧单独加载它们。

您不需要使用“已调整大小”的引用,您只需说:

player = Bitmap.createScaledBitmap(player, width/10, width/6, true);

旧位图将失去其引用并被 GC 收集。请注意,我在重新缩放时为位图过滤设置了 TRUE 以获得更好的质量。

在某些设备上,onSizeChanged 可能发生两次,这可能会调整位图大小两次,如果那是您进行缩放的地方。

无论是 ARGB_4444 还是 ARGB_8888 等,加载位图的格式都会有所不同,因此您可能需要探索此选项,如果您可以使用需要较少内存但对您的游戏具有足够好的质量的格式。当然,规则是不要在需要时将图像加载到比需要的更大的内存中。

关于安卓开发 : Bitmaps on surfaceview leak Memory or too big?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6953484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com