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的状态,如下:

- 阅读剩余部分 -

Scout(Monocle)高级特性开启工具

我之前有往篇文章《Flash性能分析利器Scout(原Monocle)下载及使用说明》中,介绍过通过python开启旧版本Flash SDK开发的工程的Scout高级特性。

但略显繁琐,再推荐一个开启swf的scout高级特性的工具“SWFScoutEnabler”:

SWFScoutEnabler.zip (443.2 KB, 下载次数: 1325, 最后修改: 2014-01-07 23:52)

工程源码地址,有兴趣可以看看:https://github.com/renaun/ActionScriptExamples/tree/master/SWFScoutEnabler

Flash休眠模式对Timer的影响

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

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

- 阅读剩余部分 -