【问题标题】:Android console displays: W/art: Attempt to remove non-JNI local referenceAndroid 控制台显示:W/art: Attempt to remove non-JNI local reference
【发布时间】:2017-03-01 22:28:30
【问题描述】:

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 记得裁剪折叠的过滤器,否则只会折叠匹配时间戳的行。
    【解决方案3】:

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

    即不要这样做:

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

    【讨论】:

      【解决方案4】:

      这些条目与OneSignal 无关。从以下线程来看,这似乎是WebView 的一个错误,并且在使用host GPU 关闭 时可能更频繁地发生在枚举器上。请参阅以下有关此的线程。

      【讨论】:

        猜你喜欢
        • 2016-12-01
        • 2012-06-21
        • 2017-06-06
        • 2014-12-28
        • 2020-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-22
        相关资源
        最近更新 更多