我有一个用Flash构建的安卓游戏,在玩游戏时效果很好。在玩了一段时间后重新开始游戏时,它开始经历滞后。经过三次或更多次重试后,游戏开始变得超级滞后。有没有办法可以在“你输了”屏幕上清除记忆?所以当玩家重新开始时,他/她会有一个焕然一新的开始?
答案 0 :(得分:0)
您可能需要通过确保已删除对象Event Listeners
来强制进行垃圾回收,如果导致内存泄漏/延迟最多的对象为null
,则可以执行System.gc()
由于某种原因垃圾收集不能解决它们。
发生的事情是,删除的剪辑不会立即被垃圾收集拾取,从而保留RAM,因此您需要强制它。
您无法“清除”内存,但可以从占用内存的对象中恢复内存。
正如here所示,最好让您的应用程序在空闲周期中释放空间,但看起来您处于最后的状态(尽管看起来像MovieClips的事件正在将它们保留在记忆)。
答案 1 :(得分:0)
提示#1:使用弱引用
每当addEventListener时,在第五个参数中使用“true”。具有弱引用的任何对象仍然可以被垃圾收集器收集,即使您忘记执行removeEventListener。
mc.addEventListener("eventName",doSomething,false,0,true);
提示#2:处理BitmapData。
如果您正在使用大量的Bitmap(jpg,png,bmp等),那么在使用完BitmapData时,最好使用它们。例如
class Bullet extends Sprite {
private var _bmp:Bitmap;
public function Bullet() {
//Load
var ldr:Loader = new Loader();
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, doneLoaded, false, 0, true);
ldr.url = "picture1.jpg";
ldr.load(ldr);
}
private function doneLoaded(evt:Event):void
{
//Store loaded content in _bmp
_bmp = DisplayObject(evt.target.content);
addChild(_bmp);
}
// call this function when you want to destroy this bullet.
public function unload() {
_bmp.bitmapData.dispose(); //Dispose BitmapData to release memory.
}
}