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 …但是! iOS 7在180秒后抛出断言。 帮帮我!

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

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

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

Interesting Posts