释放v8后闪退

  • Creator 版本:2.3.3

  • 目标平台: iOS

  • 详细报错信息,包含调用堆栈:

  • 重现方式:delete AppDelegate 单例后重新创建

  • 出现概率:100%

我app接入cocos的情景是: 有些时候需要展示互动动画给用户使用, 用完之后希望能把cocos用的内存释放
之前用的是2.1.1, 由于没法安全释放, 也对源码不熟悉, 就用了一个空的main.js在不需要的时候替换项目主路径, 这个方法基本上是好的, 但后面负责cocos开发的人想要升级到新版本, 于是升级到2.3.3后, 原本用空main.js的方法不管用了, 就用了一个尽可能空的项目替换, 但是内存降不下来, 于是我开始折腾安全删除Appdelegate的方法:
最后简单修改了/scripting/js-bindings/manual/jsb_global.cpp
void jsb_init_file_operation_delegate() {
static se::ScriptEngine::FileOperationDelegate delegate; // 删除
auto delegate = se::ScriptEngine::getInstance()->getFileOperationDelegate(); // 新增

}
就能正常删除和把内存降下来了, 但是重新创建Appdelegate后, 会黑屏, 但点击屏幕什么的都是有反应的, 同时控制台不停打印:
E/renderer (425): glDrawElements(static_cast(_nextState->primitiveType), count, static_cast(nextIndexBuffer->getFormat()), (GLvoid *)(base * nextIndexBuffer->getBytesPerIndex())); GL error 0x502: GL_INVALID_OPERATION:draw
然后crash在同一个地方

这部分开始我不熟悉了, 请问有办法解决吗

昨天把没有destroy的地方都补上后, 模拟器正常后真机又不正常了…真机上用的v8在dispose isolate后重新走v8::Isolate::New(create_params)的时候会crash, 什么鬼东西嘛, 看文档该exit也有exit, dispose后v8::Isolate::GetCurrent()也正常变成nil, 但重新创建就会crash, 有没有人帮帮我我快被这代码搞疯了

来人啊帮帮我

2.4.2同样100%复现
issue #2751

cocos 在逐步推进开发者放弃cocos:sleepy:

如果需要重复启动 v8是不能完全清理掉的 因为v8在一个进程只能初始化一次 如果你清理了再初始化会有问题的

那岂不是绝症了,对于原生应用嵌入cocos的app,无路可走了,cocos内存占用奇高,不释放又不行

不会的 只是不能重复初始化 如果我记得没错的话_isolate这个是可以再创建的 所以可以试试第二次不再从新new ScriptEngine 只重新创建 _isolate 具体的步骤应该挺多的 我这别的组之前的同事弄过 挺复杂的 最后因为稳定性(有闪退)没达标所以没有上线这部分

太不稳定了,还是继续使用jscore了

2.0内存释放的顺序讲究是?1.0的折腾过了,2.0还没完全弄好。退出后,有20M左右没释放

跟这个是不是有点像

是的 用的是2.2.2版本 怎么释放都会剩下一点 不过再次启动这部分没有增加 一直是那部分 之后就没管了

没敢用他们封装的webview

2.4.0也是这个问题,iOS原生集成cocos,二次启动就这个问题。

小哥你解决这个问题了么? 也是ios原生通过webview方式进游戏 第二次重进就应用崩溃了?

大佬,搞好了没。。。。

我这边操作之后,会黑屏

可以将cocos放独立进程中,啥问题都解决了,完美

ios呢 常驻内存只能

iOS释放看我这边帖子 cocos2.x退出及内存释放终极解决方案
关于v8参考 https://github.com/cocos-creator/cocos2d-x-lite/issues/2751
不要多次执行v8初始化, 从 scriptEngine 中抽出来