Задержка JavaScript setInterval, когда экран спит

Я разрабатываю приложение хронометра в Tizen, и в настоящее время я использую функцию setInterval для планирования следующего обновления текста с числами:

   chrono : function() {
       SecondsChrono += 1;
   },
   setInterval(chrono(), 1000);

Но при переводе экрана устройства в «спящий режим» хронометр запаздывает. Я хочу знать, сталкивался ли кто-нибудь с этим, и есть ли у вас способ избежать этого или у вас есть какие-либо советы для меня, чтобы реализовать этот хронометр по-другому.


person Kamila Brito    schedule 06.10.2014    source источник
comment
Обратите внимание, что это должно быть setInterval(chrono, 1000) — без скобок!   -  person Bergi    schedule 06.10.2014


Ответы (1)


Вы должны использовать setInterval только для обновления экрана, чтобы увидеть, сколько времени прошло с момента первого запуска хронометра, вы должны сделать что-то вроде этого:

var SCREEN_UPDATE_REFRESH_RATE= 1000;
var startTime= (new Date()).getTime();
var updateScreen= function() {
    var currentTime= (new Date()).getTime();
    var timeEllapsed = currentTime - startTime; //this value is in milliseconds
    document.write("Ellapesed time in seconds: " timeEllapsed / 1000);
    setTimeout(updateScreen, SCREEN_UPDATE_REFRESH_RATE);
}
updateScreen();

В этом случае лучше использовать setTimeout, чем setInterval. Разница между ними заключается в том, что setInterval планирует выполнение функции навсегда каждые X миллисекунд, в то время как setTimeout планирует выполнение один раз, а затем никогда больше, в этом случае функция устанавливает новый тайм-аут, который сохраняет процесс обновления навсегда. . Если ваша пользовательская система перегружена, различные обратные вызовы setInterval могут быть объединены в цепочку, что может привести к зависанию браузера пользователя. См. это для получения дополнительной информации.

person Hoffmann    schedule 06.10.2014
comment
Почему именно setTimeout вместо setInterval? - person Bergi; 06.10.2014
comment
Ни одна из причин, упомянутых в этой статье, не подходит здесь. Повторяющиеся setTimeout вполне эквивалентны setInterval — только один из них проще в использовании, чем другой. - person Bergi; 06.10.2014
comment
Оказывается, ни один из этих подходов не может решить мою проблему, мне придется реализовать свой хронометр на C и посмотреть, будет ли он работать. Все, что я знаю сейчас, это то, что setInterval и setInterval у меня не работают. В любом случае спасибо, ребята. - person Kamila Brito; 07.10.2014