Написание усложнения Apple Watch, которое предсказывает будущие значения и отображает данные, чувствительные ко времени.

Я нахожусь в процессе написания усложнения Apple Watch для WatchOS 2. Конкретные данные, которые я пытаюсь показать, предоставляются (через веб-запрос) с интервалами времени в диапазоне от 3 до 6 минут. У меня есть алгоритм прогнозирования, который может предсказать, как будут выглядеть значения данных. Это представляет проблему для меня.

Поскольку я хочу отобразить данные, которые мой алгоритм прогнозирования может предложить в путешествии во времени, я хотел бы использовать getTimelineEntriesForComplication (версия, которая запрашивает данные после определенной даты), чтобы предоставить будущие значения, которые, по мнению моего алгоритма, будут верны временной шкале. . Однако, когда время движется вперед (как это обычно бывает) и мы достигаем времени, когда одна из этих прогнозируемых точек данных должна была произойти, прогнозируемое значение перестает быть точным.

Например, предположим, что сейчас 12:00, и в настоящее время у меня есть (точное) значение данных A. Алгоритм прогнозирования может предсказать следующие значения данных для следующих двух часов:

  • 12:30 PM | B
  • 1:00 PM | C
  • 1:30 PM | D
  • 2:00 PM | E

Однако, когда на самом деле наступает 12:30, фактическое значение данных может быть F. Кроме того, алгоритм будет генерировать новый набор прогнозов вплоть до 14:30. Я понимаю, что могу использовать updateTimelineForComplication, чтобы указать, что временная шкала должна быть перестроена, но у меня есть две проблемы с этим методом:

  1. Я боюсь, что довольно быстро превысю лимит времени выполнения
  2. updateTimelineForComplication очищает всю временную шкалу, что кажется мне расточительным, учитывая, что все прошлые данные совершенно достоверны, это просто следующие 4 или около того значения, которые необходимо обновить.

Есть ли лучший способ справиться с этой проблемой?


person ericmarkmartin    schedule 28.11.2015    source источник


Ответы (1)


В настоящее время невозможно изменить конкретную запись временной шкалы без перезагрузки всей временной шкалы. Вы можете отправить запрос функции в Apple.

Резюме

Подводя итог нижеследующим деталям, скажем, что хотя ваш сервер обновляет свои прогнозы каждые 3-6 минут, сервер усложнений будет обновлять себя только с интервалом в 10 минут, начиная с начала часа. Обновить временную шкалу — ваш единственный вариант, так как это гарантирует, что все ваши прогнозы будут обновлены и точны в течение 10 минут.

Конкретные выводы

Что я обнаружил в прошлых тестах с использованием extendTimelineForComplication: с минимальным 10-минутным интервалом обновления, так это то, что dataSource запрашивается 100 записей до и после скользящего окна в зависимости от текущего времени.

Скользящее окно не центрировано относительно текущего времени. Для watchOS 2.0.1, похоже, запрашиваются более свежие будущие записи (через ~ 14-27 минут в будущем) и менее свежие прошлые записи (до ~ 100 минут в прошлом).

Повторная загрузка — единственный способ обновить любые записи, попадающие в течение двухчасового скользящего окна.

Проблемы

По моему опыту, extendTimelineForComplication менее надежен, чем перезагрузка временной шкалы, поскольку временную шкалу, которая никогда не перезагружается, необходимо обрезать, чтобы удалить записи. Чем меньше записей в час, тем реже это происходит, но как только кеш временной шкалы становится достаточно большим, SDK, по-видимому, агрессивно отбрасывает записи из начала и конца кеша, даже если эти записи попадают в 72-часовое время. -дорожное окно. Худшее, что я видел, это возможность путешествовать во времени только на 30 записей вместо 100.

Предоставив эти сведения, я бы не советовал никому пытаться использовать в своих интересах какое-либо поведение, которое может измениться в будущем.

Дневной бюджет и время автономной работы

Что касается дневного бюджета, это звучит более зловеще, чем есть на самом деле, но я думаю, вам придется провести некоторые интенсивные расчеты, прежде чем сервер усложнений отключит вас. Даже с десятиминутными обновлениями я никогда не превышал бюджет. Настоящая проблема – использование батареи. Вы обнаружите, что частые обновления могут разрядить аккумулятор до конца дня. Это, вероятно, самая важная причина рекомендации Apple:

Усложнения должны предоставлять как можно больше данных в течение каждого цикла обновления, поэтому укажите дату как можно дальше от будущего. Не просите систему обновить ваше усложнение в течение нескольких минут. Предоставьте данные на несколько часов или на целый день.

person Community    schedule 30.11.2015
comment
Большое спасибо за ваш подробный ответ @PetahChristian. Хотя есть еще одна вещь, которая меня интересует. Они просят вас не обновлять усложнение в течение нескольких минут, но для усложнения, для которого не известны будущие данные (например, усложнение фондового рынка), как вы избегаете использования огромного количества батареи? - person ericmarkmartin; 01.12.2015
comment
Разгрузите как можно больше работы с помощью Watch Connectivity, чтобы контроллер усложнения просто предоставлял заранее определенные данные. Подумайте о менее частых перезагрузках, если большинству ваших пользователей не нужны 10-минутные обновления. Оптимизируйте работу часов. - person ; 01.12.2015