2.4.7原生websocket 调用close导致游戏奔溃

  • Creator 版本:

  • 目标平台:

  • 重现方式:

  • 首个报错:

  • 之前哪个版本是正常的:

  • 手机型号:

  • 手机浏览器:

  • 编辑器操作系统:

  • 重现概率:

image

我最近做socket也出现了在设备(安卓)上调用close()崩溃问题。2.4.6和2.4.8我都试过了。都一样,目前,只能在调用close方法时候,别传任何参数进去还能不崩溃。看了jsb的源码。并做了测试。不管是传一个还是两个参数都会导致设备崩溃闪退。就还是这样写吧。 this._ws.close();

这种高频使用的API,有BUG应该早被人提出来了吧,坛子里应该有解决方案

没找到解决方案的。就这还是我调试的结果。就我说的方式。其他人我不清楚怎么避免呢。可能这版本就有这问题。没人反馈出来吧。如果有大佬,也可以回答我一下。 :rofl:

cocos_creator_framework-master.zip (3.7 MB)
我上传一个demo 有兴趣的。可以看看这个确实有问题。如果2.4.6以及以后版本都有这个问题。确实就很难受了。在模拟器下测试就可以了。
点击链接后,再点击关闭。就会崩溃。

我用的3.4.2 没有这个问题

demo 里虽然调的是 close,但是还是传了两个类型为 undifined 的参数过去,参数类型对不上就闪退了。
已经反馈了。这种传参不传值的使用场景是怎样的?


到没有说传参不传值的场景是怎样,主要是写法问题,并且也有被上面图片的api误导的情况,以为可以传参不传值。后面看了jsb的websocket以后,发现有判断参数的类型,导致断言崩溃。还有个就是即使改了代码,给参数默认的值,比如code = 1005 和 reason = “no_reason” 在设备什么网络都没有的时候,调用close方法同样会导致崩溃,并且是传一个参数或两个参数安卓都会崩溃。有网络的话,close到时没什么问题。

Android Studio报了我不认识的错误。这种也就不知道如何解决了。

https://github.com/cocos/cocos-engine/issues/12199 issue下面有3.x和2.x版本的保护性修复. 可以尝试一下

还有个情况,不知道你们有测到没。就是先连接一次后,关闭设备所有网络。在Android设备上,即使传递两个正确的参数。调用close也会崩溃的问题。我看这个issue 里面改动也就只是做了一些判断。你们也可以试着测一下。我是遇到了,也可以拿我提供的demo编译一个安卓版本试一下。

更新了pr, 看看能否解决你的问题?

嗯,早上试了一下修改的代码。可以了,我说的那几种情况目前都没有崩溃了。感谢引擎组小伙伴及时修复。感谢感谢~ :100:

mark一下