2013-07-22 121 views
5

我遇到了崩潰客戶,用下面的回溯:有道當應用程序在後臺

0 libGPUSupportMercury.dylib   0x3542ae2e gpus_ReturnNotPermittedKillClient + 10 
1 IMGSGX543RC2GLDriver    0x30bbf5e5 SubmitPacketsIfAny + 245 
2 GLEngine       0x32f827db glFinish_Exec + 167 
3 CoreImage       0x31fb85b7 CI::GLESContext::recursive_render(CI::Node const*, CGRect, bool) + 219 
4 CoreImage       0x31fbb351 CI::GLESContext::render(CI::Node*,  CGRect) + 41 
5 CoreImage       0x31fc2901 CI::image_get_cgimage(CI::Context*, CI::Image*, CGRect, CGColorSpace*, CI::PixelFormat) + 1313 
6 CoreImage       0x31fa8427 -[CIContext createCGImage:fromRect:format:colorSpace:] + 487 
7 CoreImage       0x31fa81e9 -[CIContext createCGImage:fromRect:] + 89 
8 App         0x0013c9db -[PZTiledImageLayer drawInContext:] (PZTiledImageLayer.m:129) 

這是由於訪問GPU時,應用程序在後臺(不允許)。

導致這種崩潰的代碼是這樣的:

if([UIApplication sharedApplication].applicationState == UIApplicationStateActive) 
{ 
    cg_image = [self.imageContext createCGImage:im fromRect:rclip]; 
} 

這意味着應用程序我檢查後改變狀態,但GPU之前,核心映像API中訪問。

使用此Core Image API時,處理應用程序背景狀態的正確方法是什麼?

+0

這是發生在主線程還是工作線程? –

+0

任何已證明的解決方案? –

+0

@rsebbe,有什麼發現? –

回答

0

如果發生在後臺線程上,您可以嘗試將其移動到主線程。這樣,這個函數的執行不與AppDelegate的回調

- (void)applicationDidEnterBackground:(UIApplication *)application 

交錯,並且你能在那裏執行一些信號,而不用擔心併發性。

相關問題