游戏中的内存管理

时间:2012-01-05 12:15:44

标签: android memory garbage-collection

我的游戏在手机中消耗了很多内存,我该如何解决这个问题?

我已经尝试将objects = null留在最后并调用垃圾收集器,但未解决。

游戏必须每分钟创建一个新的精灵。

3 个答案:

答案 0 :(得分:2)

在Sprite中消耗大量内存的是它的纹理而不是对象本身,正如我在cocos2d源中看到的那样,它们通过匹配文件名被TextureManager缓存(因为IO很慢)。因此,请记住使用 TextureManager.removeTexture()释放纹理(主要是大纹理),如果您不需要它们更长时间(或重新加载不会受到伤害)。

您还应考虑为这些精灵实施object pool。通过这种方式,您只需重复使用未使用的实例,而不是将它们丢弃,只是为了在下一刻创建一个新实例。

如果您不知道,Android SDK附带了一个名为allocation tracker的工具(现在也集成在ADT中)来分析内存使用情况。问题可能不是您所期望的。

答案 1 :(得分:1)

你已经编写了你的​​游戏每分钟创建精灵,但我想创建新的精灵替换精灵图像。如果你没有使用下面的代码对该精灵进行任何功能位置操作。

spritetest.setTexture(CCTextureCache.sharedTextureCache().addImage("newimage.png"));

答案 2 :(得分:1)

你必须清理以前创建的精灵或cocos2d的对象。

removeChild(sprite1, true);

 sprite1.cleanup()

之后,您可以为该对象指定null。

您可以调用方法

CCDirector.sharedDirector().purgeCachedData();

删除缓存的所有cocos2d缓存数据。