所以我正在尝试使用SimpleAudioEngine在我的Cocos2D游戏中播放一些效果,但在我添加它们后,我的应用程序在进入后台时崩溃(多任务)。 我在互联网上搜索了这个问题,但我找到的所有解决方案都不适用于我。我发现的是发生这个问题是因为我的应用程序试图在背景时播放声音。
在控制台中它显示了我(这是我发现其他人的错误):
sgx错误(不允许后台gpu访问):
还有一件事,当我在模拟器上运行我的应用程序,或者在我的设备上仔细调试时(在应用程序运行时逐行使用XCode),这不会发生。
答案 0 :(得分:2)
我刚遇到这个问题。我通过使用bool来检查应用程序是否正在运行,或者在应用程序转到前台(applicationWillEnterForeground)时将其设置为true,并在应用程序转到后台(applicationDidEnterbackground)时将其设置为false。因此,使用bool可以判断应用程序是否在后台,如果是,我只是退出EAGLView中的drawView函数(因此不会进行任何导致错误的图形渲染)。
我是一个非常躲闪的程序员,但这种方法对我有用,我希望它适用于其他人。我不需要卸载和重新加载我的声音或任何东西,我的应用程序现在有多任务XD
答案 1 :(得分:1)
我遇到了这种情况,大约25%的情况是我的应用程序重新进入前台。和你一样,当我删除声音时,问题就消失了。这就是我在这里遇到你的问题的方式。
我可能找到了解决方法。我做了一个看似无关的改变,但问题似乎已经消失了。现在,当我的应用程序进入后台时,我的主计划计时器无效。当我的应用程序重新进入前台时,我会重新安排计时器(重新加载声音后,我在进入背景时完全关闭)。
到目前为止,问题还没有回来。我很想知道这是否有帮助。
答案 2 :(得分:1)
我刚刚解决了这个问题。这是我的情况出了什么问题,从我在本页的其他答案和评论中可以看出,还有很多其他人的情况:
默认情况下,当我启动项目时, CCDirector :: sharedDirector() - &gt; pause(); 和 CCDirector :: sharedDirector() - &gt; resume(); < / em>分别被 AppController中的(void)applicationWillResignActive :( UIApplication *)和(void)applicationDidBecomeActive :( UIApplication *)分别调用两次.mm ,一次分别来自 AppDelegate.cpp 中的 AppDelegate :: applicationDidEnterBackground()和 AppDelegate :: applicationWillEnterForeground()。
绝对确定这些方法只在AppController.mm中被调用一次。在AppDelegate.cpp中,确保您调用 CCDirector :: sharedDirector() - &gt; stopAnimation(); 代替 CCDirector :: sharedDirector() - &gt; pause() ; 和 CCDirector :: sharedDirector() - &gt; startAnimation(); 代替 CCDirector :: sharedDirector() - &gt; resume(); 。
希望这对陷入这种糟糕情况的其他人有所帮助!
答案 3 :(得分:0)
你确定它与音频有关吗? “background gpu access”听起来像是在使用OpenGL。
答案 4 :(得分:0)
我的申请中遇到了同样的问题,花了大约4个小时才发现。第一次去的背景还可以,但是第二次崩溃应用程序。使用与OpenGL相关的简短错误消息。我有同样的问题:音频如何使图形崩溃。但这不是音频问题,而是通知问题......
我发现前景是在我的自定义电平表类中创建2个定时器。 我已注册 UIApplicationWillEnterForegroundNotification 和 UIApplicationWillResignActiveNotification 。然后,去往背景只有一个,因为我只在通知上注册......就是这样!
一个需要计算其通知!