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

代わりに、バックグラウンド スレッド内でこの関数を呼び出す必要があります。

メイン/UI スレッド内で dispatch_async を呼び出すと、最後の関数が完了する前に関数が何度も呼び出され (async がすぐに返されるため)、キューがいっぱいになる可能性があります。

UI以外の別のスレッド内で呼び出すと動作することを確認できます。

于 2012-12-20T15:41:54.813 に答える