Не удается найти ошибку, приводящую к сбою «активных утверждений за пределами допустимого времени» - PullRequest
6 голосов
/ 18 ноября 2011

Я получаю следующий журнал сбоев, который показывает, что мое приложение имеет «активные подтверждения за пределами допустимого времени». Мое приложение представляет собой приложение для потоковой передачи аудио. Сбой происходит только в том случае, если приложение находится в фоновом режиме и НЕ транслирует какой-либо аудиоконтент.

ПРИМЕЧАНИЯ:

  • Я гарантировал, что beginBackgroundTaskWithExpirationHandler в applicationDidEnterBackground имеет соответствующий endBackgroundTask в applicationWillEnterForeground.
  • Все сетевые доступы находятся в собственном потоке, а не в основном потоке.
  • Когда приложение находится в фоновом режиме, ни один поток не пытается получить доступ к сети.
  • Ошибка является случайной и не может быть продублирована путем переключения устройства в режим полета или отключения WiFi.

Любые предложения о том, как отследить это?

Вот журнал сбоев (без двоичных изображений):

Incident Identifier: 0467A340-1FD2-4D49-9FA4-76360889976D
CrashReporter Key:   fdae46f133d13bdc3f043301bc008bd56155588d
Hardware Model:      iPhone3,1
Process:         MyApp [249]
Path:            /var/mobile/Applications/DAA6B446-07D3-4C7C-BD44-80920338CAF4/MyApp/MyApp
Identifier:      MyApp
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2011-11-17 15:25:59.960 -0500
OS Version:      iPhone OS 5.0.1 (9A405)
Report Version:  104

Exception Type:  00000020
Exception Codes: 0x8badf00d
Highlighted Thread:  4

Application Specific Information:
MyApp[249] has active assertions beyond permitted time: 
{(
    <SBProcessAssertion: 0xfed8890> identifier: UIKitBackgroundCompletionTask process: MyApp[249] permittedBackgroundDuration: 600.000000 reason: finishTask owner pid:249 preventSuspend  preventIdleSleep 
)}

Elapsed total CPU time (seconds): 10.700 (user 10.700, system 0.000), 2% CPU 
Elapsed application CPU time (seconds): 0.024, 0% CPU

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0:
0   libsystem_kernel.dylib          0x3630f010 0x3630e000 + 4112
1   libsystem_kernel.dylib          0x3630f206 0x3630e000 + 4614
2   CoreFoundation                  0x343d841c 0x3434b000 + 578588
3   CoreFoundation                  0x343d711a 0x3434b000 + 573722
4   CoreFoundation                  0x3435a4d6 0x3434b000 + 62678
5   CoreFoundation                  0x3435a39e 0x3434b000 + 62366
6   GraphicsServices                0x30bdefc6 0x30bdb000 + 16326
7   UIKit                           0x377db73c 0x377aa000 + 202556
8   MyApp                       0x000024de main (main.m:14)
9   MyApp                       0x0000249c start + 32

Thread 1 name:  Dispatch queue: com.apple.libdispatch-manager
Thread 1:
0   libsystem_kernel.dylib          0x3630f3b4 0x3630e000 + 5044
1   libdispatch.dylib               0x37039e78 0x3702d000 + 52856
2   libdispatch.dylib               0x37039b96 0x3702d000 + 52118

Thread 2 name:  WebThread
Thread 2:
0   libsystem_kernel.dylib          0x3630f010 0x3630e000 + 4112
1   libsystem_kernel.dylib          0x3630f206 0x3630e000 + 4614
2   CoreFoundation                  0x343d841c 0x3434b000 + 578588
3   CoreFoundation                  0x343d7154 0x3434b000 + 573780
4   CoreFoundation                  0x3435a4d6 0x3434b000 + 62678
5   CoreFoundation                  0x3435a39e 0x3434b000 + 62366
6   WebCore                         0x3682e128 0x36786000 + 688424
7   libsystem_c.dylib               0x331aac16 0x3319b000 + 64534
8   libsystem_c.dylib               0x331aaad0 0x3319b000 + 64208

Thread 3 name:  com.apple.coremedia.player.async
Thread 3:
0   libsystem_kernel.dylib          0x3631f068 0x3630e000 + 69736
1   libsystem_c.dylib               0x331aaf2e 0x3319b000 + 65326
2   libsystem_c.dylib               0x331aacaa 0x3319b000 + 64682
3   CoreMedia                       0x32306000 0x32303000 + 12288
4   MediaToolbox                    0x35169fba 0x35166000 + 16314
5   CoreMedia                       0x32325bc6 0x32303000 + 142278
6   libsystem_c.dylib               0x331aac16 0x3319b000 + 64534
7   libsystem_c.dylib               0x331aaad0 0x3319b000 + 64208

Thread 4 name:  com.apple.NSURLConnectionLoader
Thread 4:
0   libsystem_kernel.dylib          0x3630f010 0x3630e000 + 4112
1   libsystem_kernel.dylib          0x3630f206 0x3630e000 + 4614
2   CoreFoundation                  0x343d841c 0x3434b000 + 578588
3   CoreFoundation                  0x343d7154 0x3434b000 + 573780
4   CoreFoundation                  0x3435a4d6 0x3434b000 + 62678
5   CoreFoundation                  0x3435a39e 0x3434b000 + 62366
6   Foundation                      0x35d5abc2 0x35d4a000 + 68546
7   Foundation                      0x35d5aa8a 0x35d4a000 + 68234
8   Foundation                      0x35dee59a 0x35d4a000 + 673178
9   libsystem_c.dylib               0x331aac16 0x3319b000 + 64534
10  libsystem_c.dylib               0x331aaad0 0x3319b000 + 64208

Thread 5 name:  com.apple.CFSocket.private
Thread 5:
0   libsystem_kernel.dylib          0x3631f570 0x3630e000 + 71024
1   CoreFoundation                  0x343dc66a 0x3434b000 + 595562
2   libsystem_c.dylib               0x331aac16 0x3319b000 + 64534
3   libsystem_c.dylib               0x331aaad0 0x3319b000 + 64208

Unknown thread crashed with unknown flavor: 5, state_count: 1

Ответы [ 2 ]

0 голосов
/ 04 апреля 2014

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

UIBackgroundTaskIdentifier bkgndTask;
---
bkgndTask = [app beginBackgroundTaskWithExpirationHandler:^{
    if (bkgndTask != UIBackgroundTaskInvalid) {
        [[UIApplication sharedApplication] bkgndTask];
        bkgndTask = UIBackgroundTaskInvalid;
    }
}];
0 голосов
/ 13 июля 2012

beginBackgroundTaskWithExpirationHandler имеет ограничение по времени, которое вы можете превышать.Вы можете узнать, сколько времени осталось, с помощью свойства UIApplication backgroundTimeRemaining.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...