Ответ 1
Когда должен вызываться обработчик?
Позвони после того, как сделаешь свою работу. Ваш код не должен выполнять сложные операции. Приложение находится в фоновом режиме и пользователь не видит, что изменилось. Вы можете просто установить "флаг", что данные обновляются и выполнять сложные операции после того, как пользователь запустил приложение. Если ваше решение об уведомлении пользователя либо не основано на сложных операциях, то попытайтесь провести рефакторинг кода, чтобы все необходимые данные были предварительно рассчитаны (например, в UserDefaults), и дополнительные данные просто извлекались из этих данных. Таким образом, 1-2 секунды достаточно для вашего расчета.
Зачем это нужно?
Все такие обработчики имеют замыкания завершения. Они необходимы для iOS, чтобы знать, нормально ли работает ваше приложение. Если ваше приложение будет потреблять слишком много процессорного времени, то iOS может работать медленно. Поэтому Apple хочет быть уверенной, что iOS работает нормально, несмотря на плохие приложения.
Если вы нажмете на фоновое обновление 3 удара, и HK прекратит отправку обновлений, это постоянно?
Номер
HK когда-нибудь снова начинает отправлять фоновые обновления?
Да. Но это зависит от многих факторов. Он может попытаться снова вызвать ваше приложение через 1-2 дня. Если ничего не изменится, это будет называться редко.
Поддерживает ли HK ваше приложение в фоновом режиме, пока не будет вызван обработчик?
Это неизвестно. Это зависит от многих факторов. Возможно, если iPhone заряжается, это позволит запустить ваше приложение дольше, чтобы оценить, вызван ли указатель завершения или нет. Если ваш iPhone не заряжается и батарея заряжена на 0%, то, скорее всего, iOS убьет ваше приложение. Таким образом, вы не должны выполнять какую-либо работу после вызова обработчика завершения. И постарайся сделать это простым.
Рекомендации
Вы должны обработать новые данные как можно быстрее. Если вам нужно получить много данных, попробуйте оптимизировать их и предварительно рассчитать, когда приложение находится на переднем плане, затем сохранить где-нибудь (UserDefault) и использовать новые данные с кэшированными данными для принятия решения (например, уведомить пользователя о что-то; я думаю, вам нужны фоновые обновления именно для этого).
1-2 секунды или меньше - хорошее время для фоновых обновлений.