2010-06-20 12 views
2

我有我認爲這是一個簡單的問題。我在登錄成功時調用一個基本計時器,然後設置一些處理程序來按計劃刷新一些數據。 (我還沒有粘貼定時器處理程序,因爲我不認爲它很重要,他們做什麼)反正,我試圖關閉那些定時刷新,當應用程序處於閒置狀態,但這:Flex 4:idleCounter似乎已經改變 - 現在絕大多數在線示例都被破壞了!

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(); 
     } 
    } 
} 

回答

1

因此,經過一些更多的研究,我決定空閒事件是真正的前進方向。這裏有一個簡單的例子(注意時間是「近似的」,這對我而言是可以的,也可能是大多數閒置的計時器)。

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); 
       } 
      } 
     }