Можно ли запустить NSThread или NSTimer на устройстве iOS 4, когда оно входит в фоновое состояние? - PullRequest
0 голосов
/ 19 августа 2011

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

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

Возможно ли это?

Если нет, есть ли другой способ достижения этой функциональности?

Ответы [ 3 ]

1 голос
/ 19 августа 2011

Хитрость в том, чтобы не использовать MPMusicPlayerController, поскольку, когда ваше приложение переходит в фоновый режим, оно фактически отказывается от управления приложением iPod ( вы можете проверить это, закрыв свое приложение и открыв приложение iPod ).

Для музыкального приложения, которое я сейчас разрабатываю, я свернул свой собственный музыкальный проигрыватель, используя AVAudioSession и AVPlayer (, а не AVAudioPlayer).Я реализовал очередь на плеере и источник данных ( похож на UITableViewDatasource), который питает очередь.Все это красноречиво работает в фоновом режиме и никак не связано с приложением iPod ( и в качестве дополнительного бонуса значок приложения отображается рядом с пультом дистанционного управления на панели многозадачности ).

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

0 голосов
/ 19 августа 2011

Ну да, и теперь вы не можете использовать NSTimer, потому что они признаны недействительными. Вы можете запустить блок кода для запуска через GCD для запуска в фоновом режиме, который будет иметь макс. время выполнения 10 мин.

0 голосов
/ 19 августа 2011

Конечно. Вы можете сделать это в делегате приложения applicationDidEnterBackground:.

Из шаблона:

Если ваше приложение поддерживает фоновое выполнение, этот метод вызывается вместо applicationWillTerminate: когда пользователь выходит.

...