Я согласен с тем, что действительно должен быть какой-то сигнал, с помощью которого вы можете узнать, когда приложение ложится спать и когда оно просыпается, но вы должны быть в состоянии выяснить, когда Safari просыпается косвенно.
Когда веб-просмотр переходит в фоновый режим, Safari помещает все в него, чтобы спать. Он приостанавливает любое видео, отменяет сетевой запрос, останавливает обновление пользовательского интерфейса и приостанавливает все операции setInterval/setTimeout. Сам JS никогда не будет знать (насколько я могу судить), как это произошло, но может сказать, что это произошло. Самый простой способ использовать это - создать регулярно вызываемый метод и проверить, было ли это неожиданно LONG время с момента последнего обновления. Если вы ожидаете, что что-то обновится каждые 10 секунд, и прошло пять минут, вы можете быть уверены, что устройство проснулось. Вот краткий пример, который я придумал:
var intTime = new Date().getTime();
var getTime = function() {
var intNow = new Date().getTime();
if (intNow - intTime > 1000) {
console.log("I JUST WOKE UP")
}
intTime = intNow;
setTimeout(getTime,500);
};
getTime();
Это определяет, когда пользователь возвращается из другой вкладки, уволила консоль разработчика или вернуть Safari от фона. Я установил интервал в полсекунды; вы можете установить его на все, что вам нужно, хотя я думаю, что очень низкие значения будут иметь проблемы с параллелизмом и, вероятно, сжечь батарею на устройстве без необходимости.
Спасибо Эндрю. У меня уже есть «незанятые» таймеры в моем веб-приложении, которое является электронной почтой с IM-клиентом среди других интересных функций. Я не думал об использовании одного такого таймера, чтобы определить, был ли iPad неактивным в течение определенного периода времени. Наверное, теперь это нужно будет сделать. Ура! – rcarrier
Очень умный, спасибо! – Codebeat
Я думаю, вы можете уменьшить интервал, чтобы проверить на 1 или две секунды, потому что для большинства действий требуется не менее 1 или 2 секунд, если вы не параноидны ;-). – Codebeat