标签 timer 下的文章

Flash Timer无故停止之谜

项目底层资源Cache超时使用了Timer驱动,每个资源到期Cache超时时会进行“释放”。后来发现有明显内存泄漏,排查出是因为Timer未进行导致。Oh,卖糕的~

ResourceManager为单例,Timer在工程启动时开始执行,为了方便说明见如下示例:

    public class Demo extends Sprite{
        private var _t:Timer;

        public function Demo(){
            _t = new Timer(500);
            _t.addEventListener(TimerEvent.TIMER, onTimer);
            _t.addEventListener(TimerEvent.TIMER_COMPLETE, onComplete);
            _t.start();
            trace("is running:" + _t.running);
        }

        private function onTimer(e:Event):void
        {
            trace("timer");
        }

        private function onComplete(e:Event):void
        {
            trace("complete");
        }
    }

输出:
is running:true

以上结果应该在意料之中?

但,只打印了这一行,onTimer()和onComplete()中的trace()未执行,问题就出在这。正常情况应该至少会每500ms打印一次“timer”。

若增加一个ENTER_FRAME监听,每帧输出Timer的状态,如下:

- 阅读剩余部分 -

Flash休眠模式对Timer的影响

之前处理加速器、降帧、休眠模式对Flash的Event.ENTER_FRAME频率的影响。有考虑过用Timer驱动主循环,保证稳定帧率30FPS,测试后发现Flash休眠模式也会导致Timer降频。故放弃,也未作进一步测试。

今天有同事提起Flash倒计时的精度,再次测试了一下,发现了一点规律,以下为用Timer定时打印getTimer()的结果:

- 阅读剩余部分 -