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 访问 Core Image API 之前。

使用此 Core Image API 时处理应用程序后台状态情况的正确方法是什么?

4

1 回答 1

0

如果这发生在后台线程上,您可以尝试将其移至主线程。这样,此函数的执行不会与 AppDelegate 回调交错

- (void)applicationDidEnterBackground:(UIApplication *)application

你可以在那里实现一些信号而不用担心并发。

于 2013-07-22T08:38:23.370 回答