iOS7:后台任务("myapp"具有超出允许时间的活动断言)



崩溃报告详情:

Hardware Model:      iPhone5,2
Exception Type:  00000020
Exception Codes: 0x000000008badf00d
Highlighted Thread:  3
Application Specific Information:
MyApp[1369] has active assertions beyond permitted time: 
{(
<BKProcessAssertion: 0x175ca7d0> identifier: Called by MyApp, from -[AppDelegate applicationDidEnterBackground:] process: MyApp[1369] permittedBackgroundDuration: 180.000000 reason: finishTask owner pid:1369 preventSuspend  preventIdleSleep      preventSuspendOnSleep 
)}

线程3:

Thread 3 name:  com.apple.NSURLConnectionLoader
Thread 3:
0   libsystem_kernel.dylib          0x3937ea50 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x3937e848 mach_msg + 36
2   CoreFoundation                  0x2e61261c __CFRunLoopServiceMachPort + 152
3   CoreFoundation                  0x2e610d3c __CFRunLoopRun + 788
4   CoreFoundation                  0x2e57b7a4 CFRunLoopRunSpecific + 520
5   CoreFoundation                  0x2e57b586 CFRunLoopRunInMode + 102
6   Foundation                      0x2efbb23c +[NSURLConnection(Loader)     _resourceLoadLoop:] + 316
7   Foundation                      0x2f030a0a __NSThread__main__ + 1058
8   libsystem_pthread.dylib         0x393f8956 _pthread_body + 138
9   libsystem_pthread.dylib         0x393f88c6 _pthread_start + 98
10  libsystem_pthread.dylib         0x393f6ae4 thread_start + 4

我的应用程序使用后台任务的代码在"applicationDidEnterBackground":

// 10min background task
UIBackgroundTaskIdentifier myLongTask;
myLongTask = [[UIApplication sharedApplication]
              beginBackgroundTaskWithExpirationHandler:^{
                  [locationMgrInstance timerSet];
              }];
// cell change  
[locationMgrInstance startMonitoringSignificantLocationChanges];

它在iOS 6上运行良好…但是!ios7在180秒后抛出断言。的帮助!

此消息表示您的后台任务运行时间过长。iOS7改变了后台处理的一些方面。特别是一个后台任务应该在短时间内完成,如果它没有完成,你的应用程序将被终止。您需要查看后台任务是如何运行的。特别是,您需要确保及时调用[[UIApplication sharedApplication] endBackgroundTask:task];。您还应该在过期处理程序中调用此方法。

查看Apple iOS应用程序编程指南后台执行和多任务部分。

此外,您可以检查[[UIApplication sharedApplication]backgroundTimeRemaining] -在iOS 6上,它开始于10分钟。在iOS 7中,它从3分钟开始——这就是为什么你会在180秒后超时。你需要重新评估你的后台策略来应对新的限制。

最新更新