簡體   English   中英

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

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

我制作了一個應用程序,它只需使用 NFC 讀取數據並在修改后寫回數據。 在點擊卡大約 100 次后,新意圖沒有被注冊,我在 logcat 中得到了這個

01-01 05:43:46.990 6347-6376/? E/dalvikvm: JNI ERROR (app bug): local reference table overflow (max=512)
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 操作,沒有任何其他代碼。 仍然得到同樣的錯誤。

我的想法是,因為您似乎沒有完全正確地使用nfcAdapter.enableForegroundDispatch ,所以您將其用盡了參考。

您正在onResume中啟用 ForegroundDispatch ,當檢測到卡片時,您的應用程序被暫停,然后再次恢復,它添加了第二個引用,因為第一個引用從未被處理掉,因為它應該在您的應用程序的onPause方法中。

來自enableForegroundDispatch ://developer.android.com/reference/android/nfc/NfcAdapter#enableForegroundDispatch(android.app.Activity,%20android.app.PendingIntent,%20android.Filter) 的 enableForegroundDispatch 文檔lang.String[][])

必須從主線程調用此方法,並且僅在活動處於前台(恢復)時調用。 此外,活動必須在其 Activity#onPause 回調完成之前調用 disableForegroundDispatch(Activity) 以在啟用后禁用前台調度。

您的代碼從不調用disableForegroundDispatch(Activity)所以將該方法添加到 MainActivity

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

Or use the better enableReaderMode API https://developer.android.com/reference/android/nfc/NfcAdapter#enableReaderMode(android.app.Activity,%20android.nfc.NfcAdapter.ReaderCallback,%20int,%20android.os.Bundle )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM