iOS的状态比较多,就算是进入后台,也有WillEnterBackground, DidEnterBackground的区别,激活时,也有WillEnterForeground和DidBecomeActive的区别。cocos2d-x监控的是WillEnterForeground,这种监控大多数情况下是没有问题的。
然而,在极少数极端情况下,某个app收到WillEnterForeground并不表示它下一个状态是DidBecomeActive。如果我们在收到WillEnterForeground时,resume各种声音,但下一状态不是DidBecomeActive,就相当于在后台时播放声音,openAL失效啦!
怎么解决?把AppController.mm的applicationWillEnterForeground函数里 cocos2d::Application::getInstance()_>applicationWillEnterForeground();这句话挪到applicationDidBecomeActive函数里就可以了。