2014-09-22 84 views
1

我正在尝试创建一个简单的计时器,该计时器在一段不活动时间(60秒)后将用户带回登录屏幕。计时器似乎第一次正常工作,它将用户导航回登录屏幕。但是,当我第二次重新登录到应用程序时,计时器不起作用,并且用户在60秒后没有导航到登录屏幕。我错过了什么,为什么第二次不起作用?计时器不能正常工作 - as3

private var timer:Timer; 

override protected function initialize():void 
{ 
    timer = new Timer((1)*60*1000, 1); 
    timer.start(); 
    timer.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); 
    timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete); 
} 

private function onMouseMove(event:MouseEvent):void 
{ 
    timer.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); 
    timer.reset(); 
    timer.start(); 
} 

private function onTimerComplete(event:TimerEvent):void 
{ 
    timer.removeEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete); 
    this.owner.showScreen(LOGIN_SCREEN); 
    timer.reset(); 
} 

任何帮助,将不胜感激。

回答

4

从我的提供,这里的代码中看到的就是我想象中的解决办法是:

  1. 确保initialize方法被调用每次用户“登录的”
  2. 添加/取出鼠标移动监听器stage不定时对象(这就是为什么它不能正常工作,鼠标移动将永远不会触发非显示对象)
  3. 移动timer.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);onTimerComplete方法代替方法onMouseMove

这样,鼠标移动将继续重置计时器,直到计时器结束。定时器完成后,两个侦听器都将被删除,并且用户被“注销”。

当用户重新登录时,您可以拨打initialize并再次添加监听器。 (在当前屏幕的变化假设框架去除舞台屏幕)

在你的构造函数的类贴:


你可以尝试使用它来代替initialize方法

this.addEventListener(Event.ADDED_TO_STAGE, addedToStage); 
this.addEventListener(Event.REMOVED_FROM_STAGE, removedFromStage); 

还有你的另一方法:

private function addedToStage(e:Event):void { 
    timer = new Timer((1)*60*1000, 1); 
    timer.start(); 
    stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); 
    timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete); 
} 

private function removedFromStage(e:Event):void { 
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); 
    timer.removeEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete); 
} 

private function onMouseMove(event:MouseEvent):void 
{ 
    timer.reset(); 
    timer.start(); 
} 

private function onTimerComplete(event:TimerEvent):void 
{ 
    this.owner.showScreen(LOGIN_SCREEN); 
    timer.reset(); 
} 
+0

谢谢@LDMS的回复。我发现initialize()每次用户登录时都没有被调用。我试图解决这个问题,希望这将解决计时器问题。非常感谢你..! – Sugan88 2014-09-23 10:06:10

+0

我从feathers.controls.screen重写Initialize()方法。出于某种原因,当我第二次登录时,不会调用initialize()方法。任何想法为什么? – Sugan88 2014-09-23 14:00:24

+0

你必须发布你的代码。现在我不知道如何以及何时调用'initialize'方法。我对羽毛库不熟悉,但看看我看到的这个文档“在屏幕首次添加到舞台上时运行一次”。 - 也许你可以使用'Event.ADDED_TO_STAGE'事件来设置你的计时器/监听器而不是initilize方法 – BadFeelingAboutThis 2014-09-23 16:09:05

-1

我怀疑问题是你删除了计时器的事件监听器,你必须重新初始化计时器,你为什么要删除鼠标移动的事件监听器?

+0

谢谢@ simion314的回复。我试图运行应用程序而不删除鼠标移动事件和计时器事件,它似乎仍然不工作。 – Sugan88 2014-09-23 10:01:12