具体怎么写呢,不太了解这方面的知识。在Cocos2dxActivity.java的onDestroy()里写吗?
3.x有没有解决?2.4.6还有这个问题
2.x 引擎中的 Cocos2dxActivity 的 onDestroy 方法会直接把进程给杀死,的确没有处理资源的释放流程。
你是注释掉杀进程,然后发送消息给 native 去销毁 AppDelegate 么?
Log.d(TAG, "Cocos2dxActivity onDestroy: " + this + ", mGLSurfaceView" + mGLSurfaceView);
if (mGLSurfaceView != null) {
Cocos2dxHelper.terminateProcess();
}
ScriptEngine 是单件,它的构造和析构会对 v8 platform 做初始化和释放的操作,v8 platform 的初始化只能在一个进程初始化一次,所以释放 ScriptEngine 的时候不应该去调用 ScriptEngine::destroyInstance,而应该直接调用 ScriptEngine::getInstance()->cleanup()
你还,在java里要怎么调用 ScriptEngine 得方法。这个好像是c++得方法。我们得项目也遇到这个问题了。友盟收集了很多崩溃信息,大概1-3%得用户进去一会儿就崩溃了。
这个崩溃确实还是一直存在
这个问题在 2.x 引擎里面有PR吗
解决什么问题的 PR ?
感谢大佬回复,更详细的描述,我在github上创建了一个 issue,大佬有空帮忙看看~
看到了,由于时间有限,如果很容易出现,麻烦提交一个 demo 上传到 github,我们安排跟进一下。
都补充好到issue上了~
很好,描述很详细,点赞。
初步排查,这个问题只在 android 15 上出现,应该是 android 15 的 isTaskRoot 的行为发生了变化导致的。
可以这样修复:
Cocos2dxHelper.java
public static void endApplication() {
// --> 下面这两行注释掉
// if (sActivity != null)
// sActivity.finish();
// --> 添加如下这行:
terminateProcess();
}
在 2.4.16 中修复:
这可能是目前的一个最快的解决办法,但是可能会有一些隐患,因为这种直接杀进程的办法,是不会触发生命周期的回调,比如 onPause onStop onDestroy,不过目前来看,确实是能解决崩溃
旧代码退出流程: finish -> onDestroy -> terminateProcess
在 onDestroy 中要处理的事情,如果同步的还好,如果是异步的(比如网络请求),也不会被执行,因为 onDestroy 后面马上就杀进程了。
实操,这样修改后打包上线还是有奔溃问题
请问你们是否可以本地设备上复现?
请问合并修复 pr 后是否还会出现此问题?