Creator 2.3.3 版本 官方demo连续重启(cc.game.restart)导致闪退

  • Creator 版本:2.3.3

  • 目标平台: android

  • 详细报错信息,包含调用堆栈:
    v8::internal::ScavengerCollector::CollectGarbage() 0x00000000c73442c2
    v8::internal::Heap::Scavenge() 0x00000000c71a134e
    v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) 0x00000000c719f76e
    v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) 0x00000000c719e66c
    v8::internal::Heap::AllocateRawWithLightRetry(int, v8::internal::AllocationType, v8::internal::AllocationAlignment) 0x00000000c71a5894
    v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationType, v8::internal::AllocationAlignment) 0x00000000c71a58da
    v8::internal::factory::NewRawOneByteString(int, v8::internal::AllocationType) 0x00000000c716ba00
    v8::internal::factory::NewStringFromOneByte(v8::internal::Vector, v8::internal::AllocationType) 0x00000000c716b7ca
    v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::NewStringType, int) 0x00000000c70ace82
    se::ScriptEngine::evalString(char const*, int, se::Value*, char const*) ScriptEngine.cpp:649
    se::ScriptEngine::runScript(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&, se::Value*) ScriptEngine.cpp:716
    jsb_run_script(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&, se::Value*) jsb_global.cpp:436
    (anonymous namespace)::require(se::State&) jsb_global.cpp:298
    (anonymous namespace)::requireRegistry(v8::FunctionCallbackInfov8::Value const&) jsb_global.cpp:300
    v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo) 0x00000000c73ddbca
    v8::internal::MaybeHandlev8::internal::Object v8::internal::(anonymous namespace)::HandleApiCallHelper(v8::internal::Isolate*, v8::internal::Handlev8::internal::HeapObject, v8::internal::Handlev8::internal::HeapObject, v8::internal::Handlev8::internal::FunctionTemplateInfo, v8::internal::Handlev8::internal::Object, v8::internal::BuiltinArguments) 0x00000000c73dd590
    v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Isolate*) 0x00000000c73dcfcc
    Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit 0x00000000c63864e4
    Builtins_InterpreterEntryTrampoline 0x00000000c62eef58
    Builtins_JSEntryTrampoline 0x00000000c62ec210
    Builtins_JSEntry 0x00000000c62ebf14
    v8::internal::(anonymous namespace)::Invoke(v8::internal::Isolate*, v8::internal::(anonymous namespace)::InvokeParams const&) 0x00000000c716656c
    v8::internal::Execution::Call(v8::internal::Isolate*, v8::internal::Handlev8::internal::Object, v8::internal::Handlev8::internal::Object, int, v8::internal::Handlev8::internal::Object) 0x00000000c716639a
    v8::Script::Run(v8::Localv8::Context) 0x00000000c709b018
    se::ScriptEngine::evalString(char const
    , int, se::Value*, char const*) ScriptEngine.cpp:665
    se::ScriptEngine::runScript(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&, se::Value*) ScriptEngine.cpp:716
    jsb_run_script(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&, se::Value*) jsb_global.cpp:436
    AppDelegate::applicationDidFinishLaunching() AppDelegate.cpp:68
    ::Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeRender(JNIEnv *) JniImp.cpp:232

  • 重现方式:将官方 example-cases 安装到手机, 手动点击右上角 restart, 重启后 重复该操作, 一般重复3次以上后会崩溃

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

  • 手机型号 :三星s7 android 9

  • 手机浏览器 :

  • 编辑器操作系统 :

  • 编辑器之前是否有其它报错 :

  • 出现概率:100%

  • 额外线索:

android studio 上调试显示为 加载 “src/cocos2d-jsb.js” 代码时崩溃.

截图如下:

图片可右键在新窗口中打开, 放大查看.

补充一下, 最近项目在测试热更成功重启时, 偶发出现重启闪退, 查了下论坛资料和已有提问, 做了如下保护:
断开socket,
清除所有异步操作,包括加载资源,
清除所有对原生代码设置的回调, 通知等.

测试下来还是会有几率出现闪退.

后来就想用官方demo试试看, 是否也有此问题.
creator里新建Example项目, 安装好以后在手机上测试,
连续重启3,4次以上以后, 就100%出现闪退了.

这个版本测试例 Restart 是会有报错情况,可能因为JS层报错,导致对象状态混乱,继而出现崩溃,你可以为resatrt添加个延迟,避免这个错误,再测试看看会出现崩溃不。

不行啊,2.4.4都还有这问题,helloworld重启都会闪退。求大佬解决一下吧

2.4.3 也有这个问题,

2.4.4 安卓端测试没有复现你说的问题,确定是hellowork工程吗?

是的,我就是在helloworld上加了个按钮 点击执行cc.game.restart();

不算必现,但是复现概率极高。就算不复现控制台打印里也会有好几条关于cocos-jsb相关的报错。

restart在所有的版本都会崩溃

242 崩溃几率至少40%,别的例子不说 就你们的热更新的例子 你们自己试试 不就知道了吗

3.5依然会闪退