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 分钟的空闲时间结束,它就会打开索引页面。但是当我尝试从那里登录应用程序时,它非常慢并且应用程序被挂起。

我在 Mobile 中使用此代码。我只是想知道函数的编写方式是否存在内存泄漏。

4

1 回答 1

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);
   }
 }());
于 2013-01-11T12:35:34.770 回答