Xamarin Android JNI 错误访问已删除全局 0x000000

问题描述

我遇到了一个无法捕捉的错误,如下所示。 我应该从哪里开始调试这种错误

我猜这是内存泄漏问题或 GC 引用了已删除的对象。 但是,错误消息并没有给我任何线索,为什么会发生这种情况,或者我应该从哪里开始挖掘......

您可以查看vimeo

JNI ERROR (app bug): accessed deleted Global 0x606a
[java_vm_ext.cc] JNI DETECTED ERROR IN APPLICATION: use of deleted global reference 0x606a
[java_vm_ext.cc] "Thread-28" prio=10 tid=34 Runnable
[java_vm_ext.cc]   | group="main" sCount=0 dsCount=0 flags=0 obj=0x13080000 self=0x7ac5a58c00
[java_vm_ext.cc]   | sysTid=8181 nice=-10 cgrp=default sched=0/0 handle=0x7aaabfd4f0
[java_vm_ext.cc]   | state=R schedstat=( 237903034 19270156 585 ) utm=20 stm=3 core=3 HZ=100
[java_vm_ext.cc]   | stack=0x7aaa9fe000-0x7aaaa00000 stackSize=2MB
[java_vm_ext.cc]   | held mutexes= "mutator lock"(shared held)
[java_vm_ext.cc]   native: #00 pc 00000000003cb654  /system/lib64/libart.so 

// ...

[libc] Fatal signal 6 (SIGABRT),code -6 (SI_TKILL) in tid 8181 (GLThread 25),pid 7983 (ngoslab.lithium)

这里是完整的error log

解决方法

我找到了原因。当同时使两个 SKGLView 无效时,我面临 JNI ERROR (app bug): accessed deleted Global 0x606a

因此,我从 SKGLView 更改为 SKCanvasView。之后,问题就再也没有出现过。