Как узнать, выполняется ли задание в фоновом режиме, когда ваше приложение спит? - PullRequest
0 голосов
/ 10 октября 2011

При управлении памятью в Objective C у нас есть общее правило: если вы создаете объект с помощью любого из следующих методов, вам необходимо освободить объект позже.

  • alloc
  • new
  • copy
  • mutableCopy

Это правило легко запомнить.Я ищу аналогичное простое правило для решения, выполняет ли что-то фоновую обработку, когда приложение спит.Существует ли такой точный список?

  • NSUrlRequest - если вы отправляете запрос, то сразу же нажимаете кнопку home, возможно ли, что мое приложение все еще обрабатывает ответ сервера?
  • Таймер - вы установили таймер на срабатывание через 1 минуту, но нажали кнопку «Домой» до истечения 1 минуты.Таймер все еще работает, останавливается или отменяется?
  • Цикл For - вы пишете цикл for, который выполняет миллион итераций.Вы закрываете приложение после того, как оно выполнено с 600 000 итераций.Что происходит с остальными 400 000 итераций, когда приложение спит и когда вы снова открываете приложение?
  • И так далее ...

Есть еще дюжина других вещей, которые я 'Я думаю о том, когда приложение спит.Я волнуюсь, потому что с тех пор, как я начал разрабатывать это приложение для видеокамер, у меня было ужасное время автономной работы (падение на 50% за ночь).Может быть, это совпадение или, может быть, камера все еще записывает, пока приложение спит.

1 Ответ

1 голос
/ 11 октября 2011

Это в некоторой степени зависит от флагов UIBackgroundModes в вашем комплекте.Вы можете использовать их, чтобы сообщить iOS, что вы хотите продолжить работу в фоновом режиме.Вы также можете динамически запрашивать достаточно времени для продолжения загрузки в течение нескольких минут, используя beginBackgroundTaskWithExpirationHandler.

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

Я не уверен на 100%, что происходит с NSURLConnections, но я подозреваю, что они отменены по умолчанию.

См .:

Руководство по программированию iPhoneOS (PDF), с.65

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

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