簡體   English   中英

setTimeout導致內存泄漏

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM