Можно ли верить интервальному таймеру? Дрейф и фон
Об этом узнают посреди круга. Перерыв, выставленный на тридцать секунд, тянется ближе к сорока. Или телефон, который вы между кругами перевернули экраном вниз, убил приложение ещё два круга назад, и обнаружится это только когда вы возьмёте его в руки. Во время бёрпи за часами следит таймер. И работать он должен там, куда вы не смотрите.
Ничего из этого не ново. Тридцать четыре отзыва за восемь лет, четыре приложения; одна строчка покрывает их все:
“It stops running when the screen goes off, when you take a call” («перестаёт работать, когда гаснет экран и когда вам звонят»).
Трёхзвёздочный отзыв августа достался приложению, которое продаётся уже десятилетие: “adding extra time to each interval and counts up” («добавляет время к каждому интервалу и считает дальше»).
Таймер, который тихо опаздывает
Большинство таймеров устроены вокруг тика. Раз в секунду приложение просыпается, прибавляет единицу к счётчику и засыпает обратно. Звучит правильно, и всё равно уплывает: тик, назначенный на секунду, приходит на несколько миллисекунд позже. Телефон был занят, или система на миг придавила приложение; задержка оседает внутри интервала и больше не возвращается.
Это копится. Сотни интервалов, и тренировка идёт дольше задуманного, хотя на экране остаётся ваше число: 20/10 где-то на двадцатом круге уже превратились в 21/11. Это и называют дрейфом.
Решение известно давно: каждый раз спрашивать у системы, сколько сейчас времени, и вычислять остаток. Секундомер на телефоне работает именно так, и заминки телефона ему не страшны, потому что копить нечего. А приложение, которое удлиняет каждый интервал, просто отдаёт вам обратно задержки, накопленные счётчиком.
Поймать дрейф можно даже выброшенной тренировкой. Выставьте десять кругов: десять секунд работы, десять перерыва, от старта до финиша три минуты двадцать. Запустите рядом с кухонным таймером, экран включён, посторонних приложений нет. Финиш в 3:29. Вы нашли дрейф меньше чем за четыре минуты.
Телефон, который убивает таймер
Вторая поломка происходит вне приложения. Обе системы видят в свёрнутом приложении расход батареи и распоряжаются этим сурово. Android усыпляет то, что считает простаивающим, а Samsung, Xiaomi и другие производители ставят поверх системы собственные батарейные менеджеры, и те убивают всё, что засиделось в фоне. iOS замораживает его при блокировке экрана, если оно не играет звук фоном.
Вы поднимаете телефон между кругами, а тренировки уже нет. Желание одного бегуна, который пишет треки в Strava, умещается в одну строчку: “won’t crash when Strava and Spotify are running” («не падает, пока работают Strava и Spotify»). Таймер, переживший блокировку экрана, но умирающий, когда подкаст забирает звуковой канал, подводит в самый неудобный момент, когда руки заняты и телефон не достать.
О том, насколько плохи заводские настройки, лучше всего говорят стандартные советы. На Android рекомендуют залезть в настройки и вручную вывести таймер из оптимизации батареи. На iOS гиревик в марте писал в ветку: “I couldn’t find a way to stop my screen (on iOS) from turning off mid set without manually stopping in the iOS settings” («не нашёл, как помешать экрану гаснуть посреди подхода, иначе как вручную ковыряться в настройках iOS»). Получается, пользователь должен перенастроить телефон, чтобы таймер мог работать.
Таймер, собранный под интервалы, забирает эту борьбу на себя. Это и есть обещание тренировки с выключенным экраном, и у него две опоры. Звук продолжает играть при запертом экране, а следующий сигнал назначен заранее: он прозвучит, даже если приложение в этот момент спало.
Проверка на семь минут
Прогоните оба теста, пока приложение не получило ваши пресеты. Когда таймер хранит ваши круги, переезд стоит дороже проверки.
Тест на дрейф описан выше: десять кругов 10/10 и кухонный таймер рядом. Второй тест карманный. Выставьте трёхминутный раунд, нажмите старт, заблокируйте экран, положите телефон в карман и отойдите. Вернитесь к моменту гонга. Счёт сходится с настенными часами, сигналы прозвучали в темноте. Таймер выдержал. Тренировка, замершая на 2:14 в ожидании касания экрана, не выдержала. Эти два теста входят и в больший список проверок перед первой тренировкой.
Если всё сошлось, во время тренировки о таймере можно не думать.
Что таймер обязан гарантировать
Интервалы держатся ровно столько, сколько выставлено: длинная тренировка не длиннее собственной арифметики. Экран гаснет, отсчёт продолжается. Рядом играют музыка, подкаст, трекер пробежки; что бы ни занимало экран, таймер не теряет голоса. А если его прервал звонок, он называет место, где остановился, и продолжает оттуда же. Весь список гарантий, от чисел до фоновой работы, собирает сводный гайд по интервальному таймеру.
Приложения, которым эти фразы не даются, обещают размытое: «оптимизированный тайминг» там, где честнее было бы написать «работает при заблокированном экране».
Как это устроено в Intertakt
Именно эти две поломки и были техзаданием Intertakt. Телефон ложится экраном вниз, звук продолжает идти, от случайных касаний тренировку держит режим-блок: таймер работает при выключенном экране, в кармане, в режиме «не беспокоить».
Время считается по монотонным часам, поэтому тридцать минут интервалов заканчиваются ровно за тридцать минут, а сами интервалы выставляются целыми секундами, включая шаги по пятнадцать.
Экран погас, приложение свернули, позвонили — тренировка выживает. Приложение скажет, где остановилось, и продолжит с той же секунды. Никаких тихих сбросов в ноль.
Android-версия уже в Google Play: Intertakt. iOS в планах; лист ожидания на этом сайте отправит одно письмо о её выходе, спама не будет. А прежде чем доверить ей свои круги, прогоните семиминутную проверку.
FAQ
Откуда в таймере берётся лишнее время?
Из механики счёта. Если приложение само отсчитывает секунды, каждый шаг опаздывает на миллисекунды, и опоздание никуда не списывается. За несколько сотен интервалов набегает лишнее время: тренировка выходит длиннее плана, хотя экран всё ещё показывает то, что вы выставили. Если остаток читается напрямую с системных часов, как у секундомера, копить ошибку негде.
Почему таймер останавливается вместе с экраном?
Обычно приложение не сломано: его усыпила сама система. Android бережёт батарею и усыпляет всё, что кажется ему малоактивным, поверх этого производители добавляют свои слои экономии, и кое-кто выгружает фоновые приложения начисто. iOS держит приложение замороженным, пока экран заперт, если фоном не играет звук. Проверить стоит две настройки: исключение из оптимизации батареи на Android и автоблокировку экрана на iOS, иначе экран погаснет посреди подхода. Если таймер умирает только рядом с другими звуковыми приложениями, это отдельная история, про звуковой канал.
Как проверить таймер на точность?
В первый же день, пока приложение не запомнило ваши тренировки. Дрейф ловится прогоном десяти кругов формата 10/10: по часам на кухне финиш обязан наступить ровно на 3:20. Фон проверяется трёхминутным раундом с заблокированным телефоном в кармане: вовремя ли прозвучал гонг. Этих двух прогонов хватит, чтобы решить, оставлять приложение или искать другое.
Что с этим у Intertakt?
Тренировка идёт с потемневшим экраном: гудки в «не беспокоить», карманные касания не ставят её на паузу. Длина интервала выбирается целыми секундами, хоть пятнадцать, хоть три минуты; длинная тренировка держит исходную длину. Звонок остановит круг; когда вы вернётесь, отсчёт продолжится с места остановки. Сначала Google Play, iOS позже; лист ожидания пришлёт письмо о выходе Android-версии и больше ничего.
Почему таймер умирает, когда играют музыка и подкаст?
Звуковой канал на телефоне один, и очередь на него строгая. Когда музыку или подкаст система считает важнее, таймер может перезапуститься и заново просить право голоса, а то и вовсе замолчать на середине круга. Это отдельная история про звук, а не про экран. Проверяется она тем же карманным тестом: трёхминутный раунд, заблокированный телефон, и гонг обязан прийти вовремя.
Дрейф бывает только у дешёвых таймеров?
Нет. Трёхзвёздочный отзыв августа достался приложению, которое продаётся уже десятилетие, и жалоба там та же: добавляет время к каждому интервалу. Тридцать четыре отзыва за восемь лет на четыре приложения складываются в одну строчку про гаснущий экран и лишнее время. Поломка не про цену приложения, а про то, как оно считает время и переживает блокировку.
Заберите таймер с собой
Intertakt бесплатен в Google Play: тренировки без лимита, без рекламы, с выключенным экраном.
Скачать в Google Play