Android 控制台显示:W/art:尝试删除非 JNI 本地引用

问题描述 投票:0回答:5

我刚刚设置了我的第一个 Cordova 项目并安装了 OneSignal 推送通知。 这一切都按照我的预期工作,但是 Android 开发者工具在控制台中显示了这一点:

W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
I/art: WaitForGcToComplete blocked for 6.202ms for cause Background
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread

该消息在应用程序运行时不断输出。

这是什么意思以及如何解决存在的任何问题?

android cordova android-studio logcat
5个回答
23
投票

该问题似乎与此 Chromium bug 有关。引用错误报告:

在打开了 CheckJNI 的 ART 最新版本中,这会导致 垃圾邮件警告将打印到 logcat,指出“尝试删除 非 JNI 本地引用,使用线程转储转储线程”,如 显然参数不应该被删除,只有对象 作为本地引用从 native->java JNI 调用返回。这不是 实际上是一个问题,因为运行时在这种情况下什么也不做 (除了打印警告之外),但是对于使用 webview 来说这是垃圾邮件 可能想要使用 checkjni 运行开发版本的应用程序 已启用。

这与主机 GPU 模拟问题不同,后者会导致应用程序崩溃,而不是让它运行并发出垃圾邮件警告。

我查了很多资料,但找不到在 ART 上禁用 CheckJNI 的方法(尽管对于 Dalvik 来说这是可能的)。我当前的解决方法是过滤 logcat。为此,请在 Android Studio 的 logcat 窗口中选择警告文本,然后右键单击它并选择

Fold lines like this


19
投票

这些条目与

OneSignal
无关。从以下线程来看,这似乎是
WebView
的错误,并且在使用
host GPU
off 时,在枚举器上更常发生。请参阅以下涉及此的主题。


5
投票

如果您是在自己的应用程序中收到此消息的开发人员,请确保您没有意外删除作为 JNI 方法参数给出的本地引用。

即不要这样做:

JNIEXPORT void JNICALL Java_my_app_MyClass_myMethod
    (JNIEnv* env, jobject self, jobject someParam) {
    env->DeleteLocalRef(someParam);
}

0
投票

就我而言,这是因为我的 WebView (

animation: donut-spin 1.2s linear infinite;
) 中有一个 CSS 动画导致了此错误消息。

我尝试了https://issuetracker.google.com/issues/37065041#comment10中描述的内容,但它不起作用......所以我只是在模拟器中运行时评论我的CSS动画。


0
投票

以下内容为我完成了:添加到

Manifest
下的<
application

android:hardwareAccelerated="true"
© www.soinside.com 2019 - 2024. All rights reserved.