我正在尝试创建一个简单的计时器,它会在一段时间不活动(60秒)后将用户带回登录屏幕。计时器似乎第一次工作正常,它导航用户返回登录屏幕。但是,当我第二次重新登录应用程序时,计时器不起作用,并且用户在60秒后没有导航到登录屏幕。我错过了什么,为什么第二次不能工作?
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();
}
任何帮助都将不胜感激。
答案 0 :(得分:4)
从我在提供的代码中看到的,这是我想象的解决方案:
initialize
方法
stage
上添加/删除鼠标移动侦听器而不是计时器对象(这就是为什么它不起作用,鼠标移动永远不会在非显示对象上触发)< / LI>
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();
}
答案 1 :(得分:-1)
我怀疑问题是您删除了计时器的事件监听器,您必须重新初始化计时器,还为什么要删除鼠标移动的事件监听器?