Если я зарегистрирую приложение для фонового приложения, войду в фон и создам фоновый обработчик примерно за 10 минут, чтобы завершить задачу, по истечении времени обработчик вызовет блок завершения, и в этом блоке снова создайте фоновый обработчик, который вы снова получите 10 минут и так далее, таким образом приложение останется в фоновом режиме. Я имею в виду, нормально ли это делать....? или Apple будет возражать против этого?
Законно ли создавать рекурсивный фоновый обработчик в iphone? (обработка, когда приложение переходит в фоновый режим)
Ответы (4)
Из документации:
Приложения, выполняющие фоновые задачи, имеют ограниченное количество времени для их выполнения. (Вы можете узнать, сколько времени доступно, используя свойство backgroundTimeRemaining.) Если вы не вызываете endBackgroundTask: для каждой задачи до истечения времени, система завершает работу приложения.
Так что нет, вы не можете бесконечно работать в фоновом режиме.
Да, это правильно, вы не можете бегать бесконечно таким образом. Но я нашел еще один трюк, когда приложение входит в фоновый режим, начните воспроизведение звука с нулевой громкостью :-) Ваше приложение никогда не будет убито.
Существует приложение VoIP Media5, которое может принимать входящие вызовы в фоновом режиме с использованием сокетов UDP.
Разработчики сказали, что они использовали «трюк», чтобы поддерживать приложение активным навсегда, и я бы исключил опцию бесшумного воспроизведения звука. Так вот вопрос: в чем прикол?
Также Bria может получать по UDP в фоновом режиме.
Из комментария 20 к проблеме 515: поддержка фоновых приложений для iPhone с поддержкой многозадачности а>:
Я почти уверен, что без непрерывного воспроизведения аудиофайла или регистрации положения GPS вы не сможете поддерживать в рабочем состоянии сокеты прослушивания UDP в iOS 4.3+ (как в основном потоке, так и во вторичном). Если вы воспроизводите аудиозапись с помощью AVAudioPlayer (после инициализации AudioSession ранее) в цикле nsrunloop каждые 5 секунд, основной поток остается активным, и, кроме того, НЕ обязательно объявлять поддержку звукового фона в info.plist.
Я думаю, что это «уловка», которую использовали Media5 и Bria. Я также попытался создать бесконечный поток TCP для петлевого интерфейса, объявив его как VoIP, просто чтобы посмотреть, поддерживается ли сокет UDP. Ответ — нет, только TCP-сокеты работают в фоновом режиме (и с заблокированным экраном), UDP тем временем закрывается и больше не может прослушивать входящие вызовы.
Таким образом, ключевым моментом является то, что основной поток должен оставаться активным... использование простого ntimer или бесконечного цикла выполнения в одиночку бесполезно, поскольку сторожевой таймер убивает процесс через несколько секунд в фоновом режиме (за исключением случаев, когда вы работаете в режиме отладки с подключенным интерфейсом GDB). , он работает вечно).