有没有办法用as3清除内存?

时间:2013-12-30 05:18:09

标签: android actionscript-3 flash

我有一个用Flash构建的安卓游戏,在玩游戏时效果很好。在玩了一段时间后重新开始游戏时,它开始经历滞后。经过三次或更多次重试后,游戏开始变得超级滞后。有没有办法可以在“你输了”屏幕上清除记忆?所以当玩家重新开始时,他/她会有一个焕然一新的开始?

2 个答案:

答案 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.

    }
}