Блокировка iPhone отключает сокеты только на iOS 5 - PullRequest
4 голосов
/ 25 ноября 2011

Я работаю над клиент-серверным приложением на основе сокетов.

Когда пользователь, работающий с iDevice на iOS 4, 4.2.1, 4.3.2 и т. Д., Нажимает кнопку блокировки при подключении к серверу, соединение остается активным.

Однако, когда я нажимаю кнопку блокировки на любом устройстве под управлением iOS 5, соединение немедленно разрушается, и после возвращения в приложение с экрана блокировки мне представляется мой NSAlertView, который вызывается при вызове метода NSStreamEventErrorOccurn.

У меня было несколько клиентов, которые тестировали приложение, и у каждого из них с iOS 5 была такая же проблема - независимо от устройства (iPod 2g, iPod 4g, iPhone 3GS, iPhone 4).

Были ли какие-либо изменения в том, как устройства iOS 5 обрабатывают блокировки? Как я могу это исправить?

EDIT:

Я должен упомянуть, что проект был запущен в Xcode 4 (iOS 4 SDK) и теперь используется в Xcode 4.2. Не знаю, имеет ли это значение.

Ответы [ 2 ]

1 голос
/ 27 ноября 2011

Как и в комментариях, в iOS 5 появилась новая «функция», которая отправляет приложение в фоновый режим, когда пользователь блокирует устройство, что эффективно убивает сетевую активность.* для обозначения критических участков кода, которым требуется доступ к сокету.Это должно позволить коду запускаться, пока приложение ненадолго находится в фоновом режиме.Не забудьте позвонить endBackgroundTask, когда закончите.

0 голосов
/ 30 ноября 2011

На самом деле я не думаю, что в iOS 5, когда вы блокируете устройство, активное приложение будет отправлено в фоновом режиме, оно просто станет неактивным.Я провел несколько тестов, если у вас запущена загрузка по сети, затем отправьте приложение в фоновый режим, сетевой сокет не уничтожен, а приостановлен.вы можете подождать 10+ секунд (10 секунд - это время по умолчанию для расширенного времени вашего приложения, прежде чем ваше приложение будет приостановлено в фоновом режиме), а затем вернуть приложение на передний план, и вы увидите, что загрузка по сети на полпути завершена.Если вы заблокируете устройство и сразу же разблокируете его, вы столкнетесь с ошибкой в ​​сети, поскольку ваш сокет был отключен.Это говорит мне о том, что ios 5 не просто отправляет ваше приложение в фоновый режим, когда устройство заблокировано, но и сразу же отключает сетевой сокет (использование расширенного фонового задания, вероятно, не поможет)

...