2017-02-18 33 views
0

Что произойдет, если я звоню beginBackgroundTaskWithExpirationHandler периодически каждые несколько минут и не звоню endBackgroundTask?Есть ли предел для фоновых задач?

Есть ли какой-либо предел для создания фоновых задач?

+0

В зависимости от того, находится ли ваше приложение на переднем плане или нет. – rmaddy

+0

@rmaddy Что делать, если приложение всегда в фоновом режиме? –

+1

Если приложение было сохранено в фоновом режиме с помощью этого механизма, и вы пренебрегаете вызовом 'endBackgroundTask', ОС будет убивать ваше приложение (а не просто изящно приостанавливать его). Поэтому вы обычно хотите вызвать 'endBackgroundTask', даже если вы делаете это только в блоке тайм-аута. – Rob

ответ

3

Что произойдет, если я называю beginBackgroundTaskWithExpirationHandler периодически каждые минут и никогда не называйте endBackgroundTask

  • Ничего не происходит. Несмотря на свое название, beginBackgroundTaskWithExpirationHandler: фактически не «начинает» задачу. Возможно, лучше подумать о том, что «register ...», а не «begin ...». Вы просто сообщаете системе, что вы находитесь в середине того, что хотите завершить, если все в порядке.

Есть ли какие-либо ограничения для создания фоновой задачи?

  • No. Однако приложения, работающие фоновые задачи имеют конечное количество времени, чтобы запустить их. (Вы можете узнать, сколько времени доступно с использованием свойства backgroundTimeRemaining.) Если вы не вызываете endBackgroundTask: для каждой задачи до истечения времени, система убивает приложение. Если вы предоставите объект блока в параметре обработчика, система вызовет ваш обработчик до истечения времени, чтобы дать вам шанс закончить задачу.

This и this хорошие чтения по теме.

+0

Что делать, если у моей задачи должно быть больше времени для выполнения, я имею в виду, есть ли способ сбросить время истечения срока действия, проверив местоположение или что-то еще? –

+0

Да, приложения, которые инициируют загрузку на переднем плане, могут отменить управление этими загрузками в систему, тем самым позволяя приостанавливать или прекращать приложение во время загрузки. Это поможет вам реализовать его => https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html – ystack

+0

Что произойдет, если вы зарегистрируете новую задачу в expirationHandler? Будете ли вы получать больше, пока ОС не устанет от вас? Или это просто терпит неудачу? – Honey