Законно ли создавать рекурсивный фоновый обработчик в iphone? (обработка, когда приложение переходит в фоновый режим)

Если я зарегистрирую приложение для фонового приложения, войду в фон и создам фоновый обработчик примерно за 10 минут, чтобы завершить задачу, по истечении времени обработчик вызовет блок завершения, и в этом блоке снова создайте фоновый обработчик, который вы снова получите 10 минут и так далее, таким образом приложение останется в фоновом режиме. Я имею в виду, нормально ли это делать....? или Apple будет возражать против этого?


person Ankit Srivastava    schedule 30.09.2011    source источник
comment
Вы уверены, что это вообще работает? Я предполагаю, что ОС все равно убьет ваше приложение.   -  person Stephen Darlington    schedule 30.09.2011


Ответы (4)


Из документации:

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

Так что нет, вы не можете бесконечно работать в фоновом режиме.

person Robin Summerhill    schedule 30.09.2011

Да, это правильно, вы не можете бегать бесконечно таким образом. Но я нашел еще один трюк, когда приложение входит в фоновый режим, начните воспроизведение звука с нулевой громкостью :-) Ваше приложение никогда не будет убито.

person Santosh    schedule 01.10.2011
comment
Основания для отказа магазина приложений, хотя. - person Kenny Winker; 01.10.2011

Существует приложение VoIP Media5, которое может принимать входящие вызовы в фоновом режиме с использованием сокетов UDP.

Разработчики сказали, что они использовали «трюк», чтобы поддерживать приложение активным навсегда, и я бы исключил опцию бесшумного воспроизведения звука. Так вот вопрос: в чем прикол?

Также Bria может получать по UDP в фоновом режиме.

person mark    schedule 13.10.2011
comment
Приложения VoIP, зарегистрированные в iOS как таковые, могут работать в фоновом режиме навсегда. - person Damien; 24.10.2011

Из комментария 20 к проблеме 515: поддержка фоновых приложений для iPhone с поддержкой многозадачности:

Я почти уверен, что без непрерывного воспроизведения аудиофайла или регистрации положения GPS вы не сможете поддерживать в рабочем состоянии сокеты прослушивания UDP в iOS 4.3+ (как в основном потоке, так и во вторичном). Если вы воспроизводите аудиозапись с помощью AVAudioPlayer (после инициализации AudioSession ранее) в цикле nsrunloop каждые 5 секунд, основной поток остается активным, и, кроме того, НЕ обязательно объявлять поддержку звукового фона в info.plist.

Я думаю, что это «уловка», которую использовали Media5 и Bria. Я также попытался создать бесконечный поток TCP для петлевого интерфейса, объявив его как VoIP, просто чтобы посмотреть, поддерживается ли сокет UDP. Ответ — нет, только TCP-сокеты работают в фоновом режиме (и с заблокированным экраном), UDP тем временем закрывается и больше не может прослушивать входящие вызовы.

Таким образом, ключевым моментом является то, что основной поток должен оставаться активным... использование простого ntimer или бесконечного цикла выполнения в одиночку бесполезно, поскольку сторожевой таймер убивает процесс через несколько секунд в фоновом режиме (за исключением случаев, когда вы работаете в режиме отладки с подключенным интерфейсом GDB). , он работает вечно).

person SIPMan    schedule 24.10.2011