需求:在Android原生app中嵌入一个Cocos Creator做的游戏页面,点击原生页面的一个按钮时打开这个游戏页面。
问题:点击原生页面的按钮打开游戏页面,再关闭游戏页面,再次点击按钮打开游戏页面时app崩溃。
Cocos Creator版本:2.4.0
本人安卓原生开发,不太了解Cocos开发,公司需要开发一款app,其中一个页面是Cocos Creator做的游戏页面,并且和原生有交互,比如需要调起原生的登录页面,登录成功后需要更新游戏页面的用户信息之类的。
刚开始时打开游戏页面第一次关闭游戏页面app就会关闭,看了代码发现在Cocos2dxActivity的onDestroy()方法中会调用Cocos2dxHelper.terminateProcess()把当前进程kill掉,所以app就会关闭。
把Cocos2dxHelper.terminateProcess()注释掉后,第一次关闭游戏页面app不会关闭,但第二次打开游戏页面时app崩溃,报如下错误:
猜测崩溃的原因可能是第一次关闭游戏页面时有些资源未释放,参照这篇博文:https://www.codenong.com/js6f4c7f71ce03/ 修改了引擎,用如下代码退出cocos:
exitGame() {
cc.director.pause();
cc.audioEngine.stopAll();
if (cc.director.isPaused()) {
cc.director.end();
}
}
构建、编译cocos,运行安卓项目,第一次关闭游戏页面时还是崩溃,报同样的错误:
有考虑过用多进程,把游戏页面运行在单独的游戏进程中,关闭游戏页面时kill掉游戏进程,这样就可以解决资源释放问题,app也会不崩溃。但用多进程的话就需要跨进程和原生交互,有许多不便,并且后续如果同一页面中即有cocos又有原生控件,交互越来越复杂时,跨进程交互会非常麻烦。安卓还可以用多进程,但iOS怎么解决?
比较优雅的方案是原生和cocos在同一进程中,把cocos做为一个控件显示在原生页面中,关闭cocos时释放资源,而不是简单粗暴的kill进程。
请问大家有没有碰到过这样的问题,解决方案有哪些?欢迎大家一起来讨论,先谢过了!