2013-01-11 2 views
0
var SetInactivityTimeOut = function() { 
    try { 
     var TimeoutInterval = parseInt(10, 10); 

     var PreviousTimeStamp = Math.round(new Date().getHours() * 60 + new Date().getMinutes()); 

     if (TimeoutInterval === 0) return; 

     TimeoutInterval = TimeoutInterval * 60 * 1000; //Converting to milisecond 
     var TimeOutObj; 
     if (TimeOutObj != null && TimeOutObj != undefined) { 
      clearTimeout(TimeOutObj); 
     } 
     //Ti.API.info('TimeOutObj---'+TimeOutObj); 
     TimeOutObj = setTimeout(function() { 
      open the main page 
     },TimeoutInterval); 

    } catch (e) { 
     error(e); 
    } 
} 

이것은 모든 버튼을 클릭 할 때 사용하는 기능으로, 10 분의 유휴 시간이 완료되면 인덱스 페이지가 다시 열립니다. 하지만 거기에서 응용 프로그램에 로그인하려고하면 매우 느리고 응용 프로그램이 멈추게됩니다.setTimeout으로 인해 메모리 누수가 발생했습니다.

모바일에서이 코드를 사용하고 있습니다. 난 그냥 함수가 작성된 방식으로 메모리 누수가 있는지 알고 싶었어요.

+0

@ H2CO3 나쁜 대답을 삭제한다고해서 당신이 옳지 않습니다. 너는 엄청난 명성을 얻었으니 거짓 정보를 퍼뜨려서는 안된다. 그래서 많은 사람들이 SO를 사용하며 여러면에서 위키피디아와 유사 해졌습니다. 표준을 높게 유지하십시오. 부디. – Khez

답변

3

현재 함수가 있으므로 TimeOutObj이 존재하는지 확인하기 위해 동일한 함수로 선언되고 있습니다. 항상 존재하지만 항상 undefined이 될 것입니다. 시간 초과 ID이므로 실제로 시간 초과를 지우지는 않습니다. 폐쇄에 SetInteractivityTimeout 기능의 대부분을 포장하여

, 당신은 실제 처리 함수의 범위의 TimeOutObj 외부를 선언 할 수 있습니다, 그래서 그 가치는 SetInactivityTimeout 함수를 호출 할 때마다 유지합니다.

var SetInactivityTimeOut = (function() { 
    var TimeOutObj; 
    var TimeoutInterval = 10 * 60 * 1000; //Converting to milisecond 

    return function() { 
    if (TimeOutObj) { 
     clearTimeout(TimeOutObj); 
    } 

    TimeOutObj = setTimeout(function() { 
     // open the main page 
    }, TimeoutInterval); 
    } 
}()); 
관련 문제