Приложението се срива във фонов режим поради SimpleAudioEngine

Така че се опитвам да пусна някои ефекти в моята игра Cocos2D с помощта на SimpleAudioEngine, но след като ги добавих, приложението ми се срива, когато премине на заден план (многозадачно). Търсих този проблем в интернет, но всички решения, които намерих, не работеха за мен. Това, което разбрах, е, че този проблем възниква, защото приложението ми по някакъв начин се опитва да възпроизвежда звуци, когато е на заден план.

В конзолата ми показва (което е същата грешка, която открих, че има и други хора):

sgx грешка (фоновият достъп до GPU не е разрешен):

И още нещо, когато стартирам приложението си на симулатора или дори на моето устройство, докато отстранявам грешки внимателно (минавайки ред по ред с XCode, докато приложението работи), това не се случва.


person Cokegod    schedule 01.10.2010    source източник


Отговори (5)


Изпитвах това в около 25% от случаите, когато приложението ми отново излезе на преден план. Като теб, когато премахнах звуците, проблемът изчезна. Ето как попаднах на въпроса ви тук.

Може би съм намерил решение за това. Направих промяна, която изглежда несвързана, но проблемът изглежда е изчезнал. Сега, когато приложението ми влезе във фонов режим, аз обезсилвам основния си планиран таймер. Когато приложението ми влезе отново на преден план, аз пренасрочвам таймера (след като презаредя звуците си, които напълно изключвам при влизане във фонов режим).

Досега проблемът не се е върнал. Ще ми е интересно да знам дали това помага.

person Dave    schedule 06.11.2010

Току що имах този проблем. Разреших го, като имах bool, за да проверя дали приложението работи или е във фонов режим, което зададох на true, когато приложението отиде на преден план (applicationWillEnterForeground), и което зададох на false, когато приложението отиде на заден план (applicationDidEnterbackground). Така че с помощта на bool можете да разберете дали приложението е във фонов режим и ако е, аз просто излизам от функцията drawView в EAGLView (по този начин не правя графично изобразяване, което причинява грешката).

Аз съм много хитър програмист, но този метод работи за мен и се надявам да работи за някой друг. Нямаше нужда да разтоварвам и презареждам звуците си или нещо друго и приложението ми вече има Multitasking XD

person Steve    schedule 08.11.2010
comment
UIApplication изглежда има свойство applicationState, което предоставя и тази информация. Това обаче е само за iOS4+, така че проверка с respondsToSelector: е наред. - person Ivan Vučica; 19.01.2011

Току-що разреших този проблем от моя страна. Ето какво не беше наред в моя случай и от това, което мога да кажа от другите отговори и коментари на тази страница, също и в случая на много други хора:

По подразбиране, когато започнах проекта си, CCDirector::sharedDirector()->pause(); и CCDirector::sharedDirector()->resume(); бяха и двете се извиква два пъти, веднъж от (void)applicationWillResignActive:(UIApplication *) и (void)applicationDidBecomeActive:(UIApplication *) съответно в AppController.mm и веднъж от AppDelegate::applicationDidEnterBackground() и AppDelegate::applicationWillEnterForeground() съответно в AppDelegate.cpp.

Уверете се, че тези методи се извикват само веднъж в AppController.mm. В AppDelegate.cpp вместо това се уверете, че извиквате CCDirector::sharedDirector()->stopAnimation(); вместо CCDirector::sharedDirector()->pause();< /em> и CCDirector::sharedDirector()->startAnimation(); на мястото на CCDirector::sharedDirector()->resume();.

Надяваме се, че е полезно за всеки друг, заседнал в тази скапана ситуация!

person Clément Todd    schedule 30.01.2014

Сигурни ли сте, че е свързано с аудио? "фонов достъп до gpu" звучи сякаш използва OpenGL.

person tc.    schedule 02.10.2010
comment
Да, много хора в интернет казаха, че този проблем им се е случил заради аудиото и когато премахна ефектите, това не се случва. - person Cokegod; 02.10.2010

Имах същия проблем в молбата си и прекарах около 4 часа, за да разбера. Преминаването във фонов режим беше ОК първия път, но приложението се срива втори път. С кратко съобщение за грешка, свързано с OpenGL. Имах същите въпроси: как аудиото може да срине графиката. Но не беше въпрос на аудио, а въпрос на известия...

Открих, че излизането на преден план създава 2 таймера в моя персонализиран клас за нивомер. Бях регистрирал UIApplicationWillEnterForegroundNotification и UIApplicationWillResignActiveNotification. След това преминаването на заден план направи невалиден само един, тъй като се регистрирах само на известие... Това беше!

Човек трябва да преброи своите известия!

person Denis    schedule 26.12.2013