2016-04-29 3 views
0

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

Так поток:

  1. Вызов beginBackgroundTaskWithExpirationHandler с обработчиком обратного вызова
  2. Когда он возвращается, сделать что-то, а затем вызвать снова
  3. полоскание и повторить, проверяя TaskInvalid по пути

Я знаю, что 180 секунд - это максимальное время, но в некоторых случаях это может быть короче.

На вопросы:

1: Законно ли это?

2: Вы подозреваете, что Apple будет в порядке с добавлением 3 минут фона снова и снова, тем самым оставляя процесс в фоновом режиме, например, на час?

3: Не могли бы вы рассчитывать на это?

Заранее благодарен!

+2

Вы действительно попробовали его на реальном устройстве, не подключенном к Xcode? Я сомневаюсь, что этот «трюк» даст вам больше, чем 180 секунд в фоновом режиме. – rmaddy

ответ

0

Возможно, вы подозреваете, что Apple будет в порядке с добавлением 3 минут фона снова и снова, оставляя процесс в фоновом режиме, например, на час?

Нет, Apple не будет в порядке, даже если бы вы могли это сделать. Они указали на 3-минутный лимит по какой-либо причине, чтобы убедиться, что у нас нет приложений, работающих в фоновом режиме, без ведома пользователя, потребляющих циклы процессора, память и разряд батареи. (Фактически, предел «конечной задачи» составлял 5 минут, но несколько лет назад Apple далее ограничивала его всего на 3 минуты.) Представьте себе мир, в котором все разработчики приложений обычно обходили этот 3-минутный лимит, наши устройства имели бы свои батареи разряжены быстро, а передние приложения будут менее отзывчивыми и иметь меньше памяти для работы.

Сказав это, Apple определила очень узкий набор операций, которые приемлемы для работы в фоновом режиме (VOIP, навигационные приложения, музыкальные приложения, работа с Bluetooth и т. Д.), Когда у пользователя есть разумные ожидания относительно батареи и производительности.

Существуют также классы задач, в которых используются ограниченные возможности фона (например, запрос времени для выполнения какой-либо задачи с конечной длиной, оппортунистическая периодическая выборка фона, значительные службы определения местоположения, позволяющие пользователю реагировать на push или local уведомления и т. д.). Цель состоит в том, чтобы предложить значимый баланс между фоновыми возможностями и минимизировать воздействие батареи.

В нижней строке, Apple в противном случае препятствует/сокращает использование неизбирательной работы фона. В App Store Guidelines, они явно говорят

2,16 многозадачность приложение может использовать только справочные услуги по их прямому назначению: VoIP, воспроизведение аудио, местоположение, завершение задачи, местные уведомления и т.д.

...

4.5 приложения с использованием фоновых услуг определения местоположения необходимо указать причину, которая разъясняет цель использования, с использованием механизмов, описанных в Руководстве Human Interface

Сказав все это, если вы описать, что именно вам это нужно фоновая операция для, мы могли бы описать, какой из множества различных фоновых возможностей, которые предлагает Apple, вы можете использовать для достижения желаемого эффекта. Все эти интерфейсы предназначены для решения конкретных проблем при балансировании функциональности с ограниченными ресурсами на наших устройствах. Но если это что-то вроде «эй, я хочу, чтобы ping мой сервер каждые пять минут», то нет, Apple будет хныкать об этом.

Для получения дополнительной информации об этом подробно обсуждается в главе Background Execution руководства по программированию приложений для iOS .

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