当我的应用程序进入后台时,出现如下错误信息:
012-10-18 14:38:05.964 SoundRecorder[693:14603] *** Terminating app due to uncaught
exception 'NSGenericException', reason: 'Cannot call UICreateScreenImage() while app
is in the background.'
这是我的代码:
- (void) getImage
{
CGImageRef screen = UIGetScreenImage();
UIImage* image = [UIImage imageWithCGImage:screen];
CGImageRelease(screen);
UIImageWriteToSavedPhotosAlbum(image, self, nil, nil);
NSLog(@"1");
[NSThread sleepForTimeInterval:0.5];
}
- (void) applicationDidEnterBackground: (UIApplication*) application
{
UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
while(1){
[self getImage];
if(breakpoints != 1)
break;
}
NSLog(@"run at backgroud!");
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}
答案 0 :(得分:2)
好吧,根据错误消息,当您的应用在后台时,无法调用UIGetScreenImage()
及相关功能。这是有道理的,这将是一个巨大的安全漏洞。
答案 1 :(得分:0)
您不应该使用dispatch_async,而是必须在后台线程中调用此函数。
在主/ UI线程内调用dispatch_async可能会导致函数多次被调用(因为异步立即返回),甚至在最后一个完成并且压倒队列之前。
如果您在除UI之外的其他线程中调用它,我可以确认它是否有效。