5

在网上进行了一些调查,我注意到gpus_ReturnNotPermittedKillClient当应用程序在后台运行时触发 OpenGL 操作时会抛出异常。我目前正在从事一个涉及地图视图和叠加层的项目(使用 Apple 的Breadcrumb 示例代码)。这些操作在主线程上执行,但是当地图视图被初始化或视图被推送到屏幕上时,应用程序可能会进入后台。

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

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

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

4

1 回答 1

13

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

我现在跟踪与应用程序的活动状态相关的状态栏状态,并且仅在应用程序状态为UIApplicationStateActive. 完成此操作后,我再也没有崩溃过。

于 2013-04-04T15:04:35.033 回答