赞
踩
崩溃日志信息:
- E FATAL EXCEPTION: UnityMain
- Process: cn.packageName, PID: 20736
- java.lang.Error: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
- Version '2020.3.47f1 (5ef4f5b5e2d4)', Build type 'Release', Scripting Backend 'il2cpp', CPU 'arm64-v8a'
- Build fingerprint: 'HUAWEI/NOH-AN00/HWNOH:12/HUAWEINOH-AN00/103.0.0.206C00:user/release-keys'
- Revision: '0'
- ABI: 'arm64'
- Timestamp: 2023-07-26 17:13:49+0800
- pid: 20736, tid: 20736, name: cn.packageName >>> cn.packageName <<<
- uid: 10477
- signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x4000200000000b
- x0 0000007fdf585ed8 x1 0000007fdf585ef8 x2 0000000000000002 x3 b400007a7aa620c0
- x4 b400007a7aa620b8 x5 0000000000000000 x6 0000000000000001 x7 0000000000000000
- x8 0040002000000000 x9 0000007cbe723358 x10 0040002000000000 x11 0000000000000000
- x12 00000000000000f7 x13 0040002000000000 x14 0000000000000001 x15 0000000000000011
- x16 0000007de15ad0b0 x17 0000007de159c66c x18 0000000000000050 x19 b400007b711d7200
- x20 0000007fdf586088 x21 0000007fdf586660 x22 b400007a203cdf00 x23 b400007a203d7788
- x24 b400007a7aa620b8 x25 0000000000000000 x26 0000000000000000 x27 00000000003fffe1
- x28 0040002000000000 x29 0000007fdf585eb0
- sp 0000007fdf585eb0 lr 0000007b73141f70 pc 0000007b72e23bac
- backtrace:
- #00 pc 000000000039bbac /data/app/~~lNAE8JmffhsBuqd9XfAR6g==/cn.packageName-BjvxV5PlQdkFKYwCJlPtjg==/lib/arm64/libpuerts.so (v8::internal::String::GetFlatContent(v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)0, false> const&)+16) (BuildId: 75422d62e179e88082618bf734e9b5664fd19c33)
- #01 pc 00000000006b9f6c /data/app/~~lNAE8JmffhsBuqd9XfAR6g==/cn.packageName-BjvxV5PlQdkFKYwCJlPtjg==/lib/arm64/libpuerts.so (v8::internal::AstValueFactory::GetString(v8::internal::Handle<v8::internal::String>)+40) (BuildId: 75422d62e179e88082618bf734e9b5664fd19c33)
- #02 pc 00000000003b536c /data/app/~~lNAE8JmffhsBuqd9XfAR6g==/cn.packageName-BjvxV5PlQdkFKYwCJlPtjg==/lib/arm64/libpuerts.so (v8::internal::Parser::ParseFunction(v8::internal::Isolate*, v8::internal::ParseInfo*, v8::internal::Handle<v8::internal::SharedFunctionInfo>)+840) (BuildId: 75422d62e179e88082618bf734e9b5664fd19c33)
- #03 pc 00000000003d858c /data/app/~~lNAE8JmffhsBuqd9XfAR6g==/cn.packageName-BjvxV5PlQdkFKYwCJlPtjg==/lib/arm64/libpuerts.so (v8::internal::parsing::ParseFunction(v8::internal::ParseInfo*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Isolate*, v8::internal::parsing::ReportErrorsAndStatisticsMode)+408) (BuildId: 75422d62e179e88082618bf734e9b5664fd19c33)
- #04 pc 00000000001c81b4 /data/app/~~lNAE8JmffhsBuqd9XfAR6g==/cn.packageName-BjvxV5PlQdkFKYwCJlPtjg==/lib/arm64/libpuerts.so (v8::internal::(anonymous namespace)::RenderCallSite(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::MessageLocation*, v8::internal::CallPrinter::ErrorHint*)+144) (BuildId: 75422d62e179e88082618bf734e9b5664fd19c33)
- #05 pc 00000000001c8b2c /data/app/~~lNAE8JmffhsBuqd9XfAR6g==/cn.packageName-BjvxV5PlQdkFKYwCJlPtjg==/lib/arm64/libpuerts.so (v8::internal::ErrorUtils::NewCalledNonCallableError(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)+56) (BuildId: 75422d62e179e88082618bf734e9b5664fd19c33)
- #06 pc 0000000000785e08 /data/app/~~lNAE8JmffhsBuqd9XfAR6g==/cn.packageName-BjvxV5PlQdkFKYwCJlPtjg==/lib/arm64/libpuerts.so (v8::internal::Runtime_ThrowCalledNonCallable(int, unsigned long*, v8::internal::Isolate*)+68) (BuildId: 75422d62e179e88082618bf734e9b5664fd19c33)
- #07 pc 00000000005f2d28 /data/app/~~lNAE8JmffhsBuqd9XfAR6g==/cn.packageName-BjvxV5PlQdkFKYwCJlPtjg==/lib/arm64/libpuerts.so (Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit+104) (BuildId: 75422d62e179e88082618bf734e9b5664fd19c33)
- 2023-07-26 17:13:50.388 20736-20893 AndroidRuntime cn.packageName E at libpuerts.v8::internal::String::GetFlatContent(v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)0, false> const&)(GetFlatContent:16)
- at libpuerts.v8::internal::AstValueFactory::GetString(v8::internal::Handle<v8::internal::String>)(GetString:40)
- at libpuerts.v8::internal::Parser::ParseFunction(v8::internal::Isolate*, v8::internal::ParseInfo*, v8::internal::Handle<v8::internal::SharedFunctionInfo>)(ParseFunction:840)
- at libpuerts.v8::internal::parsing::ParseFunction(v8::internal::ParseInfo*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Isolate*, v8::internal::parsing::ReportErrorsAndStatisticsMode)(ParseFunction:408)
- at libpuerts.v8::internal::(anonymous namespace)::RenderCallSite(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::MessageLocation*, v8::internal::CallPrinter::ErrorHint*)(:144)
- at libpuerts.v8::internal::ErrorUtils::NewCalledNonCallableError(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)(NewCalledNonCallableError:56)
- at libpuerts.v8::internal::Runtime_ThrowCalledNonCallable(int, unsigned long*, v8::internal::Isolate*)(Runtime_ThrowCalledNonCallable:68)
- at libpuerts.Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit(Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit:104)

E FATAL EXCEPTION: UnityMain signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault at libpuerts.v8::internal::AstValueFactory::GetString(v8::internal::Handle<v8::internal::String>)(GetString:40)
根据报错信息,可以看出是回调函数出现找不到数据的情况了。
交互的代码也比较简单,就是一个传值的回调。
- NativeProxyAdvertisement.listener = object : NativeProxyAdvertisementListener {
- override fun onShow(
- placementId: String,
- callback: NativeProxyAdvertisementCallbackListener?
- ) {
- log{"ttttttt:enter:${Thread.currentThread().name}:"+callback.hashCode()}
- disposable?.dispose()
- disposable = showAds(activity, placementId).subscribe({
- log{"ttttttt:handler:${Thread.currentThread().name}:"+callback.hashCode()}
- callback?.onShowCallback(AdvertisementShowResult.SKIPPED)
- log{"ttttttt:已经完成回调"}
- }, {
- log{"ttttttt:handler:${Thread.currentThread().name}:"+callback.hashCode()}
- callback?.onShowCallback(AdvertisementShowResult.SKIPPED)
- log{"ttttttt:已经完成回调"}
- })
- }
- }

在多次与unity交互的时候,会出现偶现崩溃的问题。
- D message: ttttttt:enter:UnityMain:79875456,
- D message: ttttttt:handler:main:79875456,
- D message: ttttttt:已经完成回调,
经过排查发现Unity的调起方法,是处于UnityMain线程中。而我们通过RXJava或者协程请求的网络数据,返回的时候,都是返回到了main主线程中。
而这里就存在线程间通信的问题。所以我们这里需要将其统一到一个线程中。避免出现跨线程通信的问题。
代码样例如下:
- NativeProxyAdvertisement.listener = object : NativeProxyAdvertisementListener {
- override fun onShow(
- placementId: String,
- callback: NativeProxyAdvertisementCallbackListener?
- ) {
- log { "ttttttt:enter:${Thread.currentThread().name}:" + callback.hashCode() }
- disposable?.dispose()
- val handler = android.os.Handler()
- disposable = showAds(activity, placementId).subscribe({
- handler.post(Runnable {
- log { "ttttttt:handler:${Thread.currentThread().name}:" + callback.hashCode() }
- callback?.onShowCallback(AdvertisementShowResult.SKIPPED)
- log { "ttttttt:已经完成回调" }
- })
- }, {
- handler.post(Runnable {
- log { "ttttttt:handler:${Thread.currentThread().name}:" + callback.hashCode() }
- callback?.onShowCallback(AdvertisementShowResult.SKIPPED)
- log { "ttttttt:已经完成回调" }
- })
- })
- }
- }

运行结果如下:
- D message: ttttttt:enter:UnityMain:191152737,
- D message: ttttttt:handler:UnityMain:191152737,
- D message: ttttttt:已经完成回调,
可以看出这样修改之后,调用和回调,均处在UnityMain线程中,崩溃问题解决。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。