[英]setTimeout causing memory leak
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中使用此代码。 我只是想知道函数编写方式中是否存在任何内存泄漏。
由于您目前拥有函数,因此TimeOutObj
会在您检查其是否存在的同一函数中声明,该函数将始终存在,但在您检查其是否为超时id时将始终undefined
,因此您永远不会真正清除超时。
通过将大多数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);
}
}());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.