2015-02-02 3 views
6

Мне нужно загрузить массив файлов изображений в базу данных, поэтому я наткнулся на Apple's background execution guide, чтобы убедиться, что приложение все еще загружает данные, когда пользователь приостанавливает или прекращает мое приложение.Как долго Apple разрешает выполнение фоновой задачи?

Но в описании оно написано giving it a little extra time to finish its work, если мы вызываем beginBackgroundTaskWithName:expirationHandler: или beginBackgroundTaskWithExpirationHandler:, чтобы начать фоновое задание.

Сколько времени должно быть little extra time?

+0

Если вы передаете данные, лучшим вариантом будет использование 'NSURLSession', как описано в руководстве по программированию iOS. – Paulw11

+0

Я не загружаю данные, а загружаю некоторые изображения с помощью' parse'. Я не уверен, что NSURLSession является наиболее эффективным подходом – donkey

ответ

8

Поправьте меня, если я ошибаюсь, но я наткнулся на a perfect article из Xamarin, которая обсуждает IOS функцию фоновой.

Я просто ломаются на две части, ИОС предварительно 7 и ИОС 7+:

IOS версии предварительного 7

Ответ прост 600 секунд (10 минут), причина обеспечивается статья выше.

IOS версия 7+

Ответ в том, что система времени выделяет вас оппортунистические. Вы придется использовать Предложение @Gary Riches в

NSLog(@"Time Remaining: %f", [[UIApplication sharedApplication] backgroundTimeRemaining]); 

выяснить. Причиной того, что он является оппортунистическим, является то, как обрабатываются фоновые задачи iOS 7+ , безусловно, оптимизированы. К быть точным, он имеет прерывистое поведение, и поэтому, если вам нужны фоновые задачи, такие как загрузка большого патрона данных, это будет намного эффективнее, если вместо этого вы используете NSURLSession.

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

Для этих TL;DR посетителей, ответа выше должно быть достаточно. Для получения дополнительной информации см. Статью выше.

+0

Im получение фоновой задачи, восстанавливающей время как 0. но все же метод mu вызывает? –

+0

Это может произойти, когда приложение построено в конфигурации отладки. Когда он создан для выпуска и распространения, ОС гораздо более воинственно относится к остановке фоновых задач. – user3847320

4

Количество времени, будет отличаться в зависимости от многих различных переменных, но это значение может быть проверена путем ссылки на свойство backgroundTimeRemaining на UIApplication:

NSLog(@"Time Remaining: %f", [[UIApplication sharedApplication] backgroundTimeRemaining]); 
-1

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

После этого вы можете позвонить «beginBackgroundTaskWithExpirationHandler», и вам нужно быть готовым на всякий случай, если «небольшое дополнительное время», которое дает Apple, недостаточно для задач, которые вам нужно закончить.

EDIT:

When an iOS application goes to the background, are lengthy tasks paused?:

Из Руководства по программированию IOS App:

Your app delegate’s applicationDidEnterBackground: method has approximately 5 seconds to finish any tasks and return. In practice, this method should return as quickly as possible. If the method does not return before time runs out, your app is killed and purged from memory. If you still need more time to perform tasks, call the beginBackgroundTaskWithExpirationHandler: method to request background execution time and then start any long-running tasks in a secondary thread. Regardless of whether you start any background tasks, the applicationDidEnterBackground: method must still exit within 5 seconds. 

От Raywenderlich: «Опять же, нет никаких гарантий и документации API даже не дают номер шара - поэтому не полагайтесь на это число. Вы можете получить 5 минут или 5 секунд, так что ваше приложение должно быть готовым ко всему »:

http://www.raywenderlich.com/29948/backgrounding-for-ios

Сколько времени вы получите после того, как ваше приложение получает фоновый определяется прошивкой. В то время, когда вы были предоставлены, никаких гарантий нет, но вы всегда можете проверить свойство backgroundTimeRemaining для UIApplication. Это скажет вам, сколько времени у вас осталось. Общий, основанный на наблюдениях консенсус заключается в том, что обычно вы получаете 10 минут. Опять же, нет никаких гарантий, и документация API даже не дает номер шара - поэтому не полагайтесь на это число. Вы можете получить 5 минут или 5 секунд, поэтому ваше приложение должно быть готово ко всему!

+2

это неверно, вы обычно получаете от 5 до 10 минут от системы после запроса фоновой задачи –

+0

Я думаю, что этот комментарий прав. Но я не могу отметить комментарий как правильный? – donkey

4

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

Apple разрешает более длительный запуск приложения в особых случаях. Для этого вам нужно будет использовать UIBackgroundModes в вашем файле info.plist. Для получения дополнительной информации об этих особых случаях см. Таблицу 3-1 на этом link.

EDIT
Вот хорошая статья, которая описывает фон задачи время работы и как достичь длительной фоновой задачи в прошивке.
https://gooddevbaddev.wordpress.com/2013/10/22/ios-7-running-location-based-apps-in-the-background/

+0

Спасибо, я думаю, UIBackgroundModes - это если вам нужны специальные службы для запуска в фоновом режиме, как показывает список. За минуты, не могли бы вы привести, где вы получаете свои 3 минуты? Большое спасибо – donkey

+0

@oasisweng проверить это [ссылка] (http://hayageek.com/ios-long-running-background-task/). – mitesh

+0

Спасибо, я наткнулся на хорошую статью, на которую мне стоит поделиться. [link] (http://developer.xamarin.com/guides/cross-platform/application_fundamentals/backgrounding/part_3_ios_backgrounding_techniques/ios_backgrounding_with_tasks/) Автор вашей ссылки не дает доказательств тому, почему его 3 минуты. На самом деле, в ios7, предоставленное время является оппортунистическим. См. Ссылку, которую я вам даю. – donkey

Смежные вопросы