游戏加载期间崩溃:理解“JNI 关键锁持有......”

Kla*_*aus 7 java android libgdx

我的 LibGDX And​​roid 游戏在加载过程中随机崩溃。我想这与 Android 由于主线程中长时间运行的任务或内存问题而杀死我的应用程序有关。

在这方面,我想了解日志中这些行的含义:

03-12 10:00:18.444  5522  5540 W com.asdfasdf: JNI critical lock held for 38.485ms on Thread[13,tid=5540,Runnable,Thread*=0x9d711000,peer=0xa3e40000,"GLThread 248"]
03-12 10:00:18.498  5522  5540 W com.asdfasdf: JNI critical lock held for 18.423ms on Thread[13,tid=5540,Runnable,Thread*=0x9d711000,peer=0xa3e40000,"GLThread 248"]
03-12 10:00:20.236  5522  5540 W com.asdfasdf: JNI critical lock held for 136.530ms on Thread[13,tid=5540,Runnable,Thread*=0x9d711000,peer=0xa3e40000,"GLThread 248"]
03-12 10:00:20.321  5522  5540 W com.asdfasdf: JNI critical lock held for 59.744ms on Thread[13,tid=5540,Runnable,Thread*=0x9d711000,peer=0xa3e40000,"GLThread 248"]
03-12 10:00:20.700  5522  5540 W com.asdfasdf: JNI critical lock held for 49.684ms on Thread[13,tid=5540,Runnable,Thread*=0x9d711000,peer=0xa3e40000,"GLThread 248"]
Run Code Online (Sandbox Code Playgroud)

我找不到关于这个主题的太多内容。日志行被归类为警告,但我不太确定他们想告诉我什么。

然后游戏以这些台词结束并为我提供一个墓碑(万岁..):

03-12 10:00:27.631  5522  5532 F libc    : Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 5532 (FinalizerDaemon), pid 5522 (com.asdfasdfe)
03-12 10:00:27.839  5618  5618 F DEBUG   : pid: 5522, tid: 5532, name: FinalizerDaemon  >>> com.asdfasdfe <<<
03-12 10:00:28.769  1944  5625 W ActivityManager:   Force finishing activity com.asdfasdfe/.AndroidLauncher
03-12 10:00:28.809  1944  2026 W InputDispatcher: channel '5f19156 com.asdfasdfe/com.asdfasdfe.AndroidLauncher (server)' ~ Consumer closed input channel or an error occurred.  events=0x9
03-12 10:00:28.810  1944  2026 E InputDispatcher: channel '5f19156 com.asdfasdfe/com.asdfasdfe.AndroidLauncher (server)' ~ Channel is unrecoverably broken and will be disposed!
Run Code Online (Sandbox Code Playgroud)

phi*_*hil 1

您的内部库之一存在内存密集型操作。进行跟踪以查找哪个库正在使用内存进行读/写操作或后台任务。要解决该问题,您可能需要增加缓冲区并添加一些检查以防止分配过多的内存。