我试图阻止我的应用在后台运行任何OpenGL,但它仍然偶尔会在现场被杀,而我还没有能够重现它。
OpenGL用于渲染文档缩略图。
明确地说,OpenGL应该从哪里开始和停止?
Apple的文档似乎不一致。在OpenGL ES Programming Guide for iOS中,我们有:在你的应用程序的applicationWillEnterForeground:方法中,重新创建任何对象并重新启动动画计时器。
在App Programming Guide for iOS中,我们有:
使用OpenGL ES进行绘图的应用程序不得使用这些方法来准备其绘图环境。相反,将任何OpenGL ES绘图调用推迟到applicationDidBecomeActive:方法。
Apparently,在applicationWillEnterForeground
之前调用applicationDidBecomeActive
。这意味着在applicationWillEnterForeground
中开始动画不会将绘图调用推迟到applicationDidBecomeActive
。
目前,我正在执行以下操作:
applicationDidBecomeActive
和applicationWillEnterForeground
applicationWillResignActive
每documentation停止缩放渲染。我使用OperationQueue
进行缩略图渲染,并执行以下操作来停止队列:
func stopQueue() {
// Ensure all operations are finished so we don't
// call OpenGL while the app is backgrounded.
workerQueue.waitUntilAllOperationsAreFinished()
workerQueue.isSuspended = true
}