2014-02-18 4 views
1

Я создал фоновое обслуживание, которое каждую секунду должно запрашивать у сервера, если есть какие-либо новые данные. Используя отладочный монитор, я заметил, что выделенная память растет и растет, пока не говорит о утечке памяти.Android Ti.Network.createHTTPClient memory leak

index.js

var intent = Titanium.Android.createServiceIntent({ 
    url: 'service.js' 
    }); 
intent.putExtra('interval', 1000); // Needs to be milliseconds 

Titanium.Android.startService(intent); 

service.js

var URL = "localhost:8051"; 
Ti.API.info("checkForNotification: " + URL); 

var xhr = Ti.Network.createHTTPClient({ 
    onload: function(e) { 
      Ti.API.info('onload called, HTTP status = '+this.status); 
     }, 
    onerror: function(e) { 
      Ti.API.info('error, HTTP status = '+this.status); 
    }, 
    timeout:5000 /* in milliseconds */ 
}); 

xhr.open('GET', URL); 
xhr.send(); 

То, что я понял, до сих пор вина xhr.send(), он не получает чистой или, может быть, это я делаю что-то неправильно. Может ли кто-нибудь предложить, как избежать этой утечки памяти?

ответ

0

Время ожидания запроса составляет 5 секунд, а время цикла составляет 1 секунду ... Таким образом, очевидно, что он отправит слишком много вызовов независимо от того, приходит ли он с ответом или нет. Даже до 5 секунд или нет. Поэтому лучше отслеживать вызовы и выпустить переменную xhr вручную. Или вы можете сделать это по-другому путем рекурсии, значит отправить вызов снова, когда вы получите ответ первого вызова и так далее.