在后台调用UIGetScreenImage()时出错

时间:2012-10-18 07:03:56

标签: iphone

当我的应用程序进入后台时,出现如下错误信息:

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;  
     }); 
}

2 个答案:

答案 0 :(得分:2)

好吧,根据错误消息,当您的应用在后台时,无法调用UIGetScreenImage()及相关功能。这是有道理的,这将是一个巨大的安全漏洞。

答案 1 :(得分:0)

您不应该使用dispatch_async,而是必须在后台线程中调用此函数。

在主/ UI线程内调用dispatch_async可能会导致函数多次被调用(因为异步立即返回),甚至在最后一个完成并且压倒队列之前。

如果您在除UI之外的其他线程中调用它,我可以确认它是否有效。