我认为这里有一个简单的问题。我在登录成功时调用一个基本计时器,然后设置几个处理程序来按计划刷新一些数据。 (我没有粘贴计时器处理程序,因为我认为它们做什么并不重要)无论如何,我试图在应用程序空闲时关闭那些定时刷新,但是:
if (e.currentTarget.mx_internal::idleCounter > 15000) {
永远不会被触发。我认为这是因为 Flex 4 处理这些对象的方式不同,但我在文档中找不到它。即使搜索idleCounter,结果也是空的。
protected function getUserByIDResult_resultHandler(event:ResultEvent):void
{
var sysMan:ISystemManager = FlexGlobals.topLevelApplication.systemManager;
sysMan.addEventListener(FlexEvent.IDLE, userIdle);
session.user = event.result as User;
timer = new Timer(5000);
timer.addEventListener(TimerEvent.TIMER, timer_short);
timer.start();
timer2 = new Timer(10000);
timer2.addEventListener(TimerEvent.TIMER, timer_long);
timer2.start();
currentState='Main';
}
private function userIdle(e:FlexEvent):void {
if (e.currentTarget.mx_internal::idleCounter > 15000) {
timer.stop();
timer2.stop();
}
if (e.currentTarget.mx_internal::idleCounter < 15000) {
if ( timer.running == false) {
timer.start();
timer2.start();
}
}
}
因此,经过更多研究后,我认为 Idle 事件确实是前进的方向。这是一个简化的示例(请注意,时间是“大约”,这对于我的目的来说是可以的,并且可能对于大多数空闲计时器来说)。
private function userIdle(e:FlexEvent):void {
idleCounter++;
trace(idleCounter);
if (idleCounter > 100) {
seconds_since_idle += 10;
idleCounter = 0;
if (seconds_since_idle > 60) {
trace("idle longer than 1 minute");
if (timer.hasEventListener(TimerEvent.TIMER)) {
timer.removeEventListener(TimerEvent.TIMER, timer_short);
}
}
if (seconds_since_idle > 180) {
trace("idle longer than 3 minutes");
sysMan.removeEventListener(FlexEvent.IDLE, userIdle);
session.user = null;
currentState='Login';
Alert.show("You have been logged out due to inactivity.",
"Alert",
Alert.OK);
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)