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

时间:2016-10-20 04:47:12

标签: android cordova android-studio logcat

我刚刚设置了我的第一个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

应用程序运行时会不断输出此消息。

这是什么意思,我该如何解决它存在的任何问题?

4 个答案:

答案 0 :(得分:16)

这些条目与OneSignal无关。从以下主题看,这似乎是WebView的错误,并且在使用host GPU 关闭时,枚举数可能会更频繁地发生。请参阅下面提到的线程。

答案 1 :(得分:16)

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

  

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

这与主机GPU仿真问题不同,后者会使应用程序崩溃,而不是让它与垃圾邮件警告一起运行。

我看起来相当多,但无法找到一种方法来禁用ART上的CheckJNI(即使Dalvik有可能)。我目前的解决方法是过滤logcat。为此,请在Android Studio的logcat窗口中选择警告文本,然后右键单击它并选择Fold lines like this

答案 2 :(得分:2)

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

即不要这样做:

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

答案 3 :(得分:0)

就我而言,这是因为我的 WebView (animation: donut-spin 1.2s linear infinite;) 中有一个 CSS 动画导致了此错误消息。

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