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