Ответ 1
Вам нужно прекратить рендеринг на любую поверхность OpenGL ES, как только вы войдете в фон.
Как предлагает Apple в связанной статье, используйте методы AppDelegate в сочетании с NSNotificationCenter...
Посмотрите этот ответ для справки...
Я получаю много отчетов о сбоях на iOS 8 с этой трассировкой стека:
Thread : Crashed: com.apple.mapdisplay.dispatch.tiledecodequeue
0 libGPUSupportMercury.dylib 0x2ce478fe gpus_ReturnNotPermittedKillClient + 9
1 libGPUSupportMercury.dylib 0x2ce483cb gpusSubmitDataBuffers + 110
2 libGPUSupportMercury.dylib 0x2ce48249 gldCreateContext + 208
3 GLEngine 0x28a4e93b gliCreateContextWithShared + 602
4 OpenGLES 0x28b2aab3 -[EAGLContext initWithAPI:properties:] + 406
5 OpenGLES 0x28b2a8ff -[EAGLContext initWithAPI:sharegroup:] + 114
6 VectorKit 0x30fb3e65 ggl::OESContext::OESContext(ggl::GLDevice*, std::__1::shared_ptr<ggl::OESSharegroup>) + 492
7 VectorKit 0x30fad45d ggl::GLDevice::vendLoader() + 204
8 VectorKit 0x30f885c5 -[VKRoadTile buildGglMeshesWithDevice:] + 2032
9 VectorKit 0x30f870c9 -[VKRoadTile initWithKey:modelTile:styleManager:sharedResources:contentScale:device:] + 84
10 VectorKit 0x30c3a893 -[VKRoadTileSource tileForData:downloadKey:sourceKey:] + 154
11 VectorKit 0x30c34bc5 __49-[VKTileSource decodeData:downloadKey:sourceKey:]_block_invoke + 84
12 libdispatch.dylib 0x33e917bb _dispatch_call_block_and_release + 10
13 libdispatch.dylib 0x33e98577 _dispatch_async_redirect_invoke + 550
14 libdispatch.dylib 0x33e9adab _dispatch_root_queue_drain + 866
15 libdispatch.dylib 0x33e9a9a9 _dispatch_worker_thread + 72
16 libsystem_pthread.dylib 0x33ff4e93 _pthread_body + 138
17 libsystem_pthread.dylib 0x33ff4e07 _pthread_start + 118
Большинство из них происходит на iOS 8.2.0, а приложение работает в фоновом режиме.
Я уверен, что никакие действия не выполняются для mapview, кроме setCenterCoordinate
и setRegion
, когда в фоновом режиме.
Согласно Apple Q & A, я знаю, что не следует перерисовывать MKMapView в фоновом режиме. Но я попытался изменить mapview centerCoordinate и область в фоновом режиме программно, но это не сработало.
Является ли это ошибкой iOS 8.2.0? Есть ли способ исправить или избежать этого? Спасибо!
Вам нужно прекратить рендеринг на любую поверхность OpenGL ES, как только вы войдете в фон.
Как предлагает Apple в связанной статье, используйте методы AppDelegate в сочетании с NSNotificationCenter...
Посмотрите этот ответ для справки...