[英]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.