AutoHandleScope hs在第二次打开CocosActivity时报错崩溃

2020-08-27 22:48:27.046 8627-8889/org.cocos2d.demo D/jswrapper: ScriptEngine::cleanup begin …
2020-08-27 22:48:27.046 8627-8889/org.cocos2d.demo D/jswrapper: ScriptEngine 1

--------- beginning of crash

2020-08-27 22:48:27.046 8627-8889/org.cocos2d.demo A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x95a0 in tid 8889 (GLThread 47094), pid 8627 (rg.cocos2d.demo)
2020-08-27 22:48:27.073 8627-8627/org.cocos2d.demo D/Cocos2dxActivity: onWindowFocusChanged() hasFocus=true

崩溃日志如上。
根据日志定位报错代码就是AutoHandleScope hs。
产品是这样的,将cocos嵌入app,打开cocosActivity,关闭,再打开cocosActivity,就崩了

Creator版本2.4.2
请做过的朋友指点一下,万分感谢。

这种一般是 cocos activity 没彻底关死,要按照游戏结束的流程,把 c++ 的内容都释放

你好我是楼主,之前就是你说的这个思路,最后我将整个Application都手动销毁了,里面该跑的析构函数都跑了,他第二次启动的时候,V8还是会报这个错误。而且之前查的时候看到文档里说V8引擎不建议销毁。猜测V8是不能销毁的。这个你有什么思路或者建议吗?

刚才好像没点回复,怕你收不到,再发一条。。还请不吝指教

二次打开的时候,有这个日志,说明 v8\ScriptEngine.cppinit 的时候,走到了 cleanup,那 _isValid 标志就不对。找一下为什么会这样?可以先 debug 确认一下,关闭时 ScriptEngine 的析构真的有走到,在里面 cleanup 方法是不是正确走完了。

1.如果我在第一次退出的时候不调用ScriptEngine.cpp的cleanup方法,第一次可以正常关闭,但不会走ScriptEngine的析构函数。现在我第一次退出的时候,手动调用ScriptEngine()->destroyInstance(),第一次退出的时候会崩溃。
崩溃的地方是这一句,这个Utips.cpp文件中的setReturnValue函数在ScriptEngine的析构执行完毕之后会继续运行(上面的判断是我自己加的,没用,加上以后不绘制了):

2、我看了_isValid的逻辑,他是init了之后就为真,为真的话cleanup就能进去,所以按理说我如果在第一次结束时不销毁engine,那么第二次启动的时候也不应该cleanup。问题是_isValid相关的逻辑我没有改过。是不是第一次退出我不应该销毁engine?

我好像又没点回复,再发一遍。

我看到了另外一个贴子,有兄弟在老版本调整成功,你可以试着仿照。这里有个问题 destroyInstance 是在 application 的析构中有调用的,你要从更上层一起关。

应该销毁,application 也要销毁。因为现在他的很多初始化和 activity 的创建相关,不销毁适配的话,只会更复杂。

大佬,方便解答一下吗?哪个老版本调整成功了,。qq:501045475。。。。

遇到同一个问题了,请问下,你这边最后有解决方案么?