加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flash – 本地计时器对象事件处理程序

发布时间:2020-12-15 07:27:55 所属栏目:百科 来源:网络整理
导读:我在类函数中有以下代码: public function foo():void{ var timer:Timer = new Timer(10000,1); timer.addEventListener(TimerEvent.TIMER_COMPLETE,onTimerComplete); timer.start();}public function onTimerComplete(e:TimerEvent):void{ // do stuff}
我在类函数中有以下代码:

public function foo():void
{
    var timer:Timer = new Timer(10000,1);
    timer.addEventListener(TimerEvent.TIMER_COMPLETE,onTimerComplete);
    timer.start();
}

public function onTimerComplete(e:TimerEvent):void
{
  // do stuff
}

上面的代码大部分时间都可以工作,但我担心的是如果计时器被垃圾收集会发生什么?是否有可能onTimerComplete永远不会触发,因为没有其他对计时器的引用?

我知道计时器有一个内部处理程序列表,但不会让它不被GC控制.

解决方法

在网上有一些参考文献,运行计时器永远不会被垃圾收集,e.g.:

Just to be clear: even if you have no references to a Timer,as long
as the timer is running,it will not be Garbage Collected (think of
it as if the runtime was keeping a reference to running timers).

by Arno Gourdol on the Adobe AIR Team

但我无法找到权威来源.

可能最好不要依赖这种特殊行为,而是将计时器作为类级变量.

建议事件侦听器保持计时器不被垃圾回收的答案是不正确的.引用是从定时器到侦听器函数(onTimerComplete),因此如果定时器可达,那么侦听器函数将不会被垃圾收集,反之亦然.这很容易测试:

<?xml version="1.0" encoding="utf-8"?>
<s:Application
xmlns:s="library://ns.adobe.com/flex/spark"
creationComplete="application1_creationCompleteHandler(event)">

<fx:Script>
    <![CDATA[
private var _gcTimer:Timer;

protected function application1_creationCompleteHandler(event:FlexEvent):void {
    var timer:Timer = new Timer(30,4);
    timer.addEventListener(TimerEvent.TIMER,onTimer,false,true);

    var sprite:Sprite = new Sprite();
    sprite.addEventListener(Event.ENTER_FRAME,onSprite,true);

    _gcTimer = new Timer(59,1);
    _gcTimer.addEventListener(TimerEvent.TIMER,garbageCollect);

    timer.start();
    _gcTimer.start();
}

private function onTimer(event:TimerEvent):void {
    trace("timer");
}

private function onSprite(event:Event):void {
    trace("sprite");
}
]]>
</fx:Script>
</s:Application>

输出:

sprite timer sprite timer Collecting garbage timer timer

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读