E/dalvikvm: JNI ERROR (app bug): local reference table overflow (max=512)

Posted

技术标签:

【中文标题】E/dalvikvm: JNI ERROR (app bug): local reference table overflow (max=512)【英文标题】: 【发布时间】:2020-11-30 19:10:33 【问题描述】:

我制作了一个应用程序,它只需使用 NFC 读取数据并在修改后写回数据。在刷卡大约 100 次后,newIntent 没有被注册,我在 logcat 中得到了这个

01-01 05:43:46.990 6347-6376/? 
01-01 05:43:46.990 6347-6376/? E/dalvikvm: Failed adding to JNI local ref table (has 512 entries)
01-01 05:43:46.990 6347-6376/? E/dalvikvm: VM aborting
01-01 05:43:46.990 6347-6376/? A/libc: Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1), thread 6376 (message)
01-01 05:43:48.010 9950-9950/com.android.nfc E/Trace: error opening trace file: No such file or directory (2)
01-01 05:43:49.930 9950-9971/com.android.nfc E/NFC-HCI: Could not open /system/vendor/firmware/libpn544_fw.so

是不是和dalvikvm有关?因为我在运行 android 9.1 的新手机中没有收到此错误。到目前为止,该问题仅在运行 4.2 的设备中出现。

我正在使用默认的 NFC 库,并且没有本机代码。以前我在带有本机代码的项目中使用相同的代码,我得到了同样的错误。 Stack overflow 中的许多答案表明这可能是由于我们没有清除本地引用的本机代码,所以我只在单独的项目中尝试了 NFC 操作,没有任何其他代码。仍然出现同样的错误。

【问题讨论】:

显示您的 NFC 代码,因为您可能做错了什么导致它。 @Andrew Check MainActivity.java gist.github.com/haseebpvt/9bce85647433f1d42a99e91b5f452db1 【参考方案1】:

我的想法是,因为您似乎没有完全正确地使用 nfcAdapter.enableForegroundDispatch,所以您将其用尽了引用。

您在onResume 中启用了 ForegroundDispatch,当检测到卡时,您的应用程序会暂停,然后再次恢复,它会添加第二个引用,因为第一个引用从未被处理掉,因为它应该在您的 onPause 方法中应用程序。

enableForegroundDispatch 的文档 来自https://developer.android.com/reference/android/nfc/NfcAdapter#enableForegroundDispatch(android.app.Activity,%20android.app.PendingIntent,%20android.content.IntentFilter[],%20java.lang.String[][])

必须从主线程调用此方法,并且仅当活动处于前台时(恢复)。此外,Activity 必须在其 Activity#onPause 回调完成之前调用 disableForegroundDispatch(Activity) 以在启用后禁用前台调度。

您的代码从不调用disableForegroundDispatch(Activity),因此将该方法添加到 MainActivity

@Override
protected void onPause() 
   nfcAdapter.disableForegroundDispatch(this);

或者使用更好的enableReaderMode API https://developer.android.com/reference/android/nfc/NfcAdapter#enableReaderMode(android.app.Activity,%20android.nfc.NfcAdapter.ReaderCallback,%20int,%20android.os.Bundle)

【讨论】:

以上是关于E/dalvikvm: JNI ERROR (app bug): local reference table overflow (max=512)的主要内容,如果未能解决你的问题,请参考以下文章

java A JNI error has occurred, please check your installation and try again A JNI error has occurr

JNI内存泄露JNI ERROR (app bug): local reference table overflow (max=512)

JNI ERROR (app bug): accessed stale local reference

位图 - 内存不足异常

Eclipse 运行导入的 Java 项目时,Error:A JNI error has occurred

JNI ERROR (app bug): accessed stale local reference