求指教,此问题无法解决将影响项目上线,急!

现有需求如下,在现有原生应用中(ANDROID、IOS)加入cocos游戏场景,需要切换不同的Activity在不同的游戏中切换。
问题:现在的问题是销毁Activity后游戏场景并没有销毁,再次打开后显示的还是上次退出的场景,并且无法交互,只要一调用Cocos2dxJavascriptJavaBridge.evalString应用就崩溃(第一次加载则不会崩溃)。尝试过cc.game.end(),但是这个会直接退出应用~~
各位老司机,求解决!谢谢!!

1赞

@panda

再次打开的时候没有走到onLoad吧,没有初始化

主要是再调Cocos2dxJavascriptJavaBridge.evalString就会崩溃

有报错信息吗?然后你是如何调用的?

A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x30 in tid 29948 (GLThread 1049)
调用是放到GL线程里的
app.runOnGLThread(new Runnable() {
@Override
public void run() {
Cocos2dxJavascriptJavaBridge.evalString(“console.log(123)”);
}
});

不调用就不会崩溃吗? 如果用 cc.log(“123”) 会如何?

是的,我的交互都是通过客户端调用触发的,不调用不会有任何动作,不会崩溃

能不能有一个测试的范例呢?我目前不好重现你的这个问题,

或者你告诉我需要做什么,才能出现你这个问题

已上传,请看附件。我快崩溃了:6: 第一次打开加载出场景以后点退出,再进就可以复现。

链接: http://pan.baidu.com/s/1nvi6Hrb 密码: 8qbx

1.4 beta6 和 1.3.2 都试了,均有这个问题。

跟 Cocos2dxJavascriptJavaBridge.evalString 这个函数有关系吗?

目测是的不调用的话就不会崩
E/cocos js error:: line:0 msg:too much recursion
A/libc: Fatal signal 11 (SIGSEGV), code 2, fault addr 0xd86c4fd8 in tid 24089 (GLThread 380)

能否去掉该函数然后在测试看看?

这个想法挺好的,就是目前看来cocos貌似不支持重复创建吧。没这样试过,楼主解决之后说一下方案呗。

你给的这个 demo 是不是只有一个 按钮? 点击了以后就会退出?然后在点击进入就会崩溃?

能否给我个 QQ ,这样比较好沟通… 或者你加我 QQ: 821686174

在帖子上沟通,信息共享哈

Android上比较容易实现说的这个效果。可以把Cocos2dxActivity配置在另外一个独立的进程(Process)中,当退出游戏的时候,调用cc.game.end()会把Cocos的进程直接杀死,也能够彻底释放引擎资源。
如果配置在同一个进程,因为cc.game.end()会的默认行为是把游戏Activity所在进程(app的进程)直接杀死,导致应用也直接退出了。

iOS上由于无法像Android创建独立的游戏进程,退出游戏需要确保引擎的所有资源完全销毁干净。
而基于目前cocos2d-js的资源管理实现,还没法做到100%回收释放的资源,导致内存泄露崩溃
这个是历史因素导致的,cocos从cocos2d-iphone发展而来,一直都是为独立单个游戏服务的,退出游戏就直接杀死进程或者exit(0), 没有对资源管理没有做到合适的管理(引擎内很多单例,销毁时间相互影响),因此要使用cocos2d做一个类似游戏中心的平台,是需要对引擎有比较深的把控,进行修改才能做到。

2赞

以前版本出Cocos确实做不到,不过creator提供了restart机制,通过设定不同的启动路径,可以实现不同的游戏启动。变相的实现了大厅+子游戏。

这个实现仅限于Native,Web上不能这么做。