#ios #swift
#iOS #swift
Вопрос:
Если вы настроили задачу фоновой выборки для запуска на iOS, после ее завершения вам необходимо выполнить вызов completionHandler
с одним из трех вариантов: .newData
, .noData
или .failed
. В зависимости от того, какой из них вы выберете, и от того, как выполняются ваши задачи, по-видимому, iOS решает, как часто выполняется фоновая выборка вашего приложения.
.newData
является ли очевидным значением по умолчанию, если все прошло нормально, и .failed
является очевидным вариантом сбоя, но как насчет .noData
? Если iOS наказывает меня за попытку извлечения устаревших данных, зачем мне вообще рассказывать iOS об этом? Если это влияет на частоту фонового задания, не лучше ли мне просто всегда сообщать iOS, что все данные, которые я извлек, были новыми, чтобы мое приложение не было вынуждено запускать фоновые задания реже, чем то, что я определил в setMinimumBackgroundFetchInterval
?
Комментарии:
1. Я не думаю, что существует какая-либо связь между используемым типом статуса и любым повышением или понижением приоритета ваших задач загрузки. Если вам нужно загрузить так много данных, что они не могут быть обработаны за один 30-секундный интервал, тогда не следует использовать шаблон для возврата .newData для каждой задачи, пока вы не закончите, а затем вернетесь. NoData?
2. Вы должны быть «хорошим гражданином». Если у вас нет новых данных, сообщите об этом iOS. Он проанализирует ваши значения завершения, чтобы попытаться определить, когда подходящее время для выполнения фоновой выборки; например, если всегда есть новые данные в 5 часов вечера и никогда новые данные в 9 утра, он, скорее всего, позвонит вам днем. Какой смысл запускать чаще, если у вас нет данных для выборки? Вы просто без причины влияете на батарею и сеть.
3. @Paulw11 В моем случае я знаю, что нет шаблона для получения новых данных, но я знаю, что хочу проверять наличие новых данных каждые 2 часа. Только потому, что данные поступали в 5 часов вечера в течение трех недель подряд, не является гарантией того, что в это время в будущем появятся новые данные. Я хотел бы иметь возможность решить это, и я обеспокоен тем, что iOS делает ложные предположения о доступности новых данных, если я что-нибудь скажу ему.
4. Более вероятно, что вы будете наказаны, если вы всегда возвращаете .newData, когда передача данных невелика
5. @Paulw11 Это хороший момент.
Ответ №1:
В зависимости от того, какой из них вы выберете, и от того, как выполняются ваши задачи, по-видимому, iOS решает, как часто выполняется фоновая выборка вашего приложения.
Это ложное предположение. Оцениваются время и энергия, которые вы используете перед вызовом обработчика завершения. Не пытайтесь играть с системой; просто будьте быстры, эффективны и честны.
Комментарии:
1. Мое предположение может быть неверным, но, основываясь на расплывчатой формулировке в документах Apple, я не уверен, что это так. Если оцениваются только время и энергия, тогда я определенно должен быть честным и просто сказать iOS правду. Однако, если я думаю, что знаю лучше, чем система, как часто следует совершать звонки, у меня может возникнуть стимул лгать, чтобы избежать наказания. В основном я ставлю под сомнение обоснованность системы, которая поощряет разработчиков лгать, чтобы рационально преследовать свои цели.