Сбой приложения, когда приложение работает в фоновом режиме — после того, как устройство переходит в спящий режим

Я постоянно вижу этот сбой, когда наше приложение (приложение Voip) находится в фоновом режиме, после того как устройство переходит в спящий режим.

Exception Type:  00000020

Exception Codes: 0xbad22222

Highlighted Thread:  3



Application Specific Information:

SBUnsuspendLimit ooVoo[360] exceeded 15 wakes in 300 sec



Thread 3 name:  com.apple.NSURLConnectionLoader

Thread 3:

0   libsystem_kernel.dylib          0x307fc010 mach_msg_trap + 20

1   libsystem_kernel.dylib          0x307fc206 mach_msg + 50

2   CoreFoundation                  0x3569b41c __CFRunLoopServiceMachPort + 120

3   CoreFoundation                  0x3569a154 __CFRunLoopRun + 876

4   CoreFoundation                  0x3561d4d6 CFRunLoopRunSpecific + 294

5   CoreFoundation                  0x3561d39e CFRunLoopRunInMode + 98

6   Foundation                      0x3167abc2 +[NSURLConnection(Loader) _resourceLoadLoop:] + 302

7   Foundation                      0x3167aa8a -[NSThread main] + 66

8   Foundation                      0x3170e59a __NSThread__main__ + 1042

9   libsystem_c.dylib               0x30b68c16 _pthread_start + 314

10  libsystem_c.dylib               0x30b68ad0 thread_start + 0

В чем причина этого крушения? Что-нибудь, что я должен сделать, чтобы предотвратить это?


person Idan    schedule 06.11.2011    source источник


Ответы (3)


Похоже, вы разговариваете с URL-адресом, когда переходите в фоновый режим. Если это так, добавьте общий кеш в свою реализацию NSURL и, если вы используете NSURLRequest, увеличьте значение timeoutInterval.

Если это не так, обработайте это как фоновую задачу. Для фоновой задачи: вы можете обратиться к обработке фоновой задачи.

С уважением,

Рено Джонс

person Reno Jones    schedule 06.11.2011
comment
Пожалуйста, уточните, как здесь может помочь общий кеш? - person Idan; 07.11.2011

NSURLConnectionLoader, вероятно, не имеет к этому никакого отношения.

Скорее всего, ваше приложение просыпается из-за трафика на сигнальном сокете TCP. Как правило, сервер VoIP (SIP?) время от времени отправляет сообщения проверки активности. Чрезмерно агрессивный сервер может невольно убить клиента, слишком часто отключая его от приостановки.

Либо убедитесь, что сервер не отправляет (SIP) сообщения проверки активности слишком часто, либо используйте API BackgroundTask, чтобы предотвратить приостановку приложения так скоро после каждой разблокировки. Таким образом, вы можете уменьшить количество разблокировок (за счет расхода заряда батареи).

С Уважением

Джонас Саллинг

person salling    schedule 01.03.2012

Не совсем уверен, как и почему, но обновление до более новой версии AsiHttp решило проблему.

person Idan    schedule 14.12.2011