应用程序背景时,使用MKMapView抛出gpus_ReturnNotPermittedKillClient错误

时间:2013-01-22 22:03:46

标签: ios opengl-es ios6 mkmapview

在线进行一些调查,我注意到当应用程序背景化时触发OpenGL操作时会抛出gpus_ReturnNotPermittedKillClient。我目前正在开发一个涉及地图视图和叠加层的项目(使用Apple的Breadcrumb sample code)。这些操作是在主线程上执行的,但是当地图视图初始化或视图被推到屏幕上时,应用程序可能会变为背景。

我也使用位置服务通过GPS检索点,但除非我们在前台,否则我不会更新叠加层。

据我所知,自iOS 6以来,MKMapView现在是用OpenGL创建的吗?如果是这种情况,那么可以通过OpenGL绘制叠加层吗?这可以帮助解释为什么我一直在随机获得此错误。

我听说过一些取消所有OpenGL操作的方法,例如在glFinish()applicationDidEnterBackgroundapplicationWillResignActive中调用[[CCDirector sharedDirector] pause]。考虑到这一点,使用MKMapView / MKOverlayView消除任何OpenGL绘图的最佳解决方案是什么?

1 个答案:

答案 0 :(得分:13)

在尝试了多个解决方案之后,我意识到导致此崩溃的原因是调整了地图视图的帧,该帧在分配地图后几秒钟被触发。状态栏下拉,地图的框架向下动画几个像素。因此,必须重新绘制地图(据说),如果此动画在后台发生,则会导致崩溃。

我现在跟踪与应用程序的活动状态相关的状态栏的状态,并且仅在应用程序状态为UIApplicationStateActive时进行动画处理。做完这个之后,我从未发生过崩溃。