Иметь актуальные данные об осложнениях, когда пользователь разблокирует свои часы?

В настоящее время я работаю над простым приложением, которое отображает данные, полученные по сети, в усложнении watchOS. Примечательно, что эти данные актуальны только в течение ~ 30 минут, прежде чем потребуется новая сетевая выборка.

Я бы хотел, чтобы усложнение было актуальным, когда пользователь разблокирует свои часы утром (это распространенный вариант использования, представленный Apple).

Можно ли получить какую-то фоновую задачу, когда пользователь разблокирует свои часы? Если я планирую фоновую задачу, а часы заблокированы и заряжаются во время обновления, будет ли фоновая задача по-прежнему запускаться? Какие методы я могу использовать, чтобы данные были готовы для пользователя, когда он проснется и разблокирует свои часы? Есть ли документация, специально посвященная фоновым задачам, когда часы заблокированы?


person Emma K Alexandra    schedule 27.11.2019    source источник


Ответы (2)


Насколько мне известно, часы работают в заблокированном состоянии лишь немного иначе, чем в разблокированном.
Одно из отличий заключается в отображении расширений:
Вы можете указать режим конфиденциальности, т. е. что циферблат отображает как усложнение (вы можете выбрать что отображается на экране блокировки).
Итак, на мой взгляд, можно запускать фоновые задачи по расписанию, когда часы заблокированы и заряжаются. Таким образом, данные будут автоматически готовы, когда часы будут разблокированы.
По этой причине нет специальной документации, что происходит, когда часы заблокированы, за исключением некоторых особых случаев, таких как то, что отображается на циферблате в заблокированном состоянии. штат.

person Reinhard Männer    schedule 05.12.2019

Я бы использовал документацию по жизненному циклу приложения здесь и, вполне возможно, выбрал бы:

  1. в applicationDidEnterBackground() я бы установил флаг (время последнего обновления сложности). Я бы посоветовал вам использовать синглтон, чтобы он был доступен в любом месте вашего приложения.

  2. затем в applicationDidBecomeActive() я бы взял флаг, сравнил его с текущим временем и уведомил активный ViewController об обновлении его данных, если он превышает 30 минут.

  3. если флаг не существует, потому что приложение было завершено или это первый запуск, то все равно обновите (установите 24-часовую дату в прошлом, чтобы использовать ту же логику, что и в 1/,2/)

если вы хотите сделать его более постоянным, используйте NSDefaults для хранения времени последнего обновления расширения.

person Alex    schedule 04.12.2019
comment
При разблокировке часов вызывается ли applicationDidBecomeActive()? Я думал, что это только тогда, когда приложение вышло на передний план, т.е. пользователь специально открыл ваше приложение - person Emma K Alexandra; 05.12.2019
comment
Я думаю, что за applicationWillEnterForeground() всегда следует вызов applicationDidBecomeActive(), см. здесь developer.apple. com/documentation/watchkit/ . Я не уверен, когда лучше всего вызывать ваш код обновления, но в двух словах, вы можете просто использовать диаграмму жизненного цикла Apple watchOs и установить/получить время последнего обновления вашей сложности (переход «A», «B» и 'C' в документах) и реагировать соответствующим образом. - person Alex; 06.12.2019