AIR Android运行时内存泄漏

时间:2014-10-08 09:59:26

标签: android actionscript-3 memory-leaks air runtime

美好的一天,

我正在AIR for Android中开发冒险游戏。我正在从库(影片剪辑)实例化级别,每个级别至少包含一个HD分辨率位图。

当游戏启动时,它占用大约150MB的内存,包括AIR运行时和SWF。在这150MB中,SWF目前约为12MB。

随着游戏的进行,AIR运行时的内存消耗增加,而SWF使用的内存保持在15-20MB左右。当总内存消耗达到大约350(!)MB时,操作系统会干预并杀死应用程序。

我小心翼翼地尽可能地重用对象,并使任何未使用的对象无效以使它们符合GC的条件。 GC似乎应该正常工作,因为SWF使用的内存保持稳定在15-20MB左右。当GC开始时,我可以看到它从20到12不时下降。

我尝试过的事情:

  • 删除了所有cacheAsBitmap和cacheAsBitmapMatrix属性。
  • 将每个级别导出到单独的SWF中,然后从那里加载它们而不是库。
  • 强迫GC黑客只是为了看它是否有任何影响。
  • 摆弄System.pauseForGCIfCollectionImminent(n),其中包含不同的n值。
  • 尝试不同的加速模式(直接和自动)思考可能是GPU出错了。

所有失败,内存消耗都会消失。

仅在Android上发生这种情况。在PC上一切都很好,整个过程大约需要250-300MB,这个数字保持稳定,无论我一个接一个地加载多少级别。还没有机会在iOS上测试。

我真的很感激任何关于如何解决这个问题的想法或见解。

感谢。

1 个答案:

答案 0 :(得分:0)

1)查找内存泄漏的最简单方法是使用Adobe Flash Builder。只需运行分析。

2)将来排除泄漏的好方法:创建将用于“清理”的功能。例如。它将使实例的所有局部变量都为空,依此类推。像通常的c ++析构函数。然后,在使对象归零之前,只需调用此方法。