0

当我的应用进入后台时,出现如下错误信息:</p>

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

2 回答 2

2

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

于 2012-10-18T08:25:14.640 回答
0

你不应该使用 dispatch_async,你必须在后台线程中调用这个函数。

在 main/UI 线程中调用 dispatch_async 可能会导致函数被多次调用(因为 async 立即返回),甚至在最后一个完成之前就会使队列不堪重负。

如果您在 UI 以外的不同线程中调用它,我可以确认它可以工作。

于 2012-12-20T15:41:54.813 回答