我的应用程序同步RSS提要约需15-30秒,并为每个同步我请beginBackgroundTaskWithExpirationHandler:
。在iOS 7和iOS 8中,一切都很完美。endBackgroundTask:导致“终止由于信号9”
与iOS 9开始调用[[UIApplication sharedApplication] endBackgroundTask: backgroundTask];
导致应用程序从调试器的消息崩溃:
由于终止信号9
从我的研究,信号9使用过多意味着,该应用记忆。当我使用仪器时,应用程序永远不会超过30mb或40%cpu。
我知道它来自endBackgroundTask:
,因为如果我不叫它,应用程序不会崩溃。然而,一旦我打电话给endBackgroundTask:应用程序每次都会崩溃。
我不知道这里发生了什么问题。我已经尝试了一切。重写代码,移动代码,注释除了endBackgroundTask之外的所有内容。任何帮助或见解将不胜感激。
下面的代码:
@interface SyncClass()
@property (nonatomic) UIBackgroundTaskIdentifier backgroundTask;
@end
-(void)startSync
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self beginBackgroundUpdateTask];
// I then call my syncing code [syncClass sync];
});
//When sync is done call endBackgroundTask
[self endBackgroundUpdateTask];
}
- (void) beginBackgroundUpdateTask
{
NSLog(@"Background Time:%f",[[UIApplication sharedApplication] backgroundTimeRemaining]);
self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[self endBackgroundUpdateTask];
}];
}
- (void) endBackgroundUpdateTask
{
[[UIApplication sharedApplication] endBackgroundTask: self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
NSLog(@"Ending background task");
}
你在后台线程? – matt
您好,是的同步方法是从另一个控制器使用被称为:dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^ { [syncManger startSync]; });刚更新的问题反映。谢谢! – TopReads
嗯,根据你所说的,我没有很好的解释。它可能是'sync'代码中的东西,你没有显示的代码?可以_什么是使用太多内存?这可能是有道理的,因为当你调用'endBackgroundTask'时,运行时会暂停你并发现你在后台使用了太多的内存(在此之前,因为你还在运行,所以你不能终止)。一般来说,我建议你认真对待这个信息:在进入后台时,你应该已经尝试释放资源以减少内存使用量。 – matt