iOS выполняет запланированную операцию в фоновом режиме или когда приложение активно - PullRequest
1 голос
/ 16 октября 2019

У меня есть модель CoreData, которую я хочу обновить в 12:00. Так что это даже когда приложение может распознать, что наступает новый день, и в 12:00 изменить некоторые вещи в моделях данных.

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

Является ли это приемлемым решением для использования некоторого таймера, который будет обновлять данные в 12 часов утра, в данном случае меня не волнует согласованность, но мне не нравится таймер, который проверяет каждую секунду уже 12 часов утра илине. Есть ли какое-нибудь обновление push-уведомлений или менеджер планировщика в iOS, который может обновлять данные для меня. Еще раз я просто хочу обновить слой данных, и меня не волнует согласованность в пользовательском интерфейсе. Если непротиворечивость имеет значение наверняка, то я хотел бы следовать исходной идее с единственной точкой извлечения данных.

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

Ответы [ 3 ]

1 голос
/ 16 октября 2019

Невозможно выполнять функцию через регулярные промежутки времени, даже когда приложение фоново / убито пользователем.

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

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

0 голосов
/ 16 октября 2019

Я бы порекомендовал проверить новые выпуски BackgroundTasks Framework Apple для iOS 13. https://developer.apple.com/documentation/backgroundtasks

Хотя вы не гарантированы в определенное время, если у вас есть окно (12:00 - 3:00), планирование фоновых задачможет быть достаточно для вас.

0 голосов
/ 16 октября 2019

Возможно, вы захотите заглянуть в BGProcessingTask. У вас не будет детального контроля над временем ЦП, но вы можете установить интервал, который вы бы предпочли, чтобы задача выполнялась. В конечном итоге, когда вы запускаете и как часто зависит от системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...