【问题标题】:Thousands of java.util.concurrent.TimeoutException: android.os.BinderProxy.finalize() timed out after 10 seconds exceptions in crashlytics成千上万的 java.util.concurrent.TimeoutException: android.os.BinderProxy.finalize() 在 crashlytics 中出现 10 秒异常后超时
【发布时间】:2016-02-10 09:38:01
【问题描述】:

首先提前感谢....我希望你能帮助我,我有点迷失了。

我在这里问,除了讨论这个问题的线程丢失了,因为我在互联网上也没有找到解决方案......它似乎在三星设备上发生 99%,因为 4.2 版本。我真的希望我不是第一个问这个的人,你可以给我一个答案,不管是好是坏:)。但我不知道这是三星问题还是一般问题,我也在其他设备上看到过它,但只有几次崩溃......在三星中是数千...... ¿?¿?

我们在我们的应用程序中集成了 crashlititycs,并且从前一段时间开始,我们开始收到不同的崩溃,但我们甚至不知道它们是否是真实的崩溃。正在抛出的异常是:

Fatal Exception: java.util.concurrent.TimeoutException
com.android.internal.os.BinderInternal$GcWatcher.finalize() timed out after 10 seconds

它发生在不同的对象中:BinderInternalBinderNativeDecimalFormatBinderProxyCloseGuardWindowsCursor 等。

这在以前没有发生过......当我试图在互联网上查看时,我发现很多人受到影响,但没有解决方案。

我最大的恐惧是……什么时候发生?是在使用应用程序时还是在后台崩溃?它是否因 Android 操作系统消息“应用程序突然停止”而崩溃?还是我可以“忽略”的内部事物?

它每天都发生很多次吗?它是恒定的……但我们无论如何都无法重现它……你知道这是什么吗?

我给你一些他们谈论垃圾收集器问题的链接,或者糟糕的终结/互联网调用问题......

How to handle :java.util.concurrent.TimeoutException: android.os.BinderProxy.finalize() timed out after 10 seconds errors?

https://www.reddit.com/r/androiddev/comments/3am3yb/some_crash_reports_have_nothing_to_do_with_my_app/

https://github.com/andstatus/andstatus/issues/301

http://openstackwiki.org/wiki/Java.util.concurrent.TimeoutException_(android.media.MediaMetadataRetriever.finalize)_Zeit%C3%BCberschreitung_nach_10_Sekunden

【问题讨论】:

  • 你有什么发现吗?我们遇到了同样的问题。在我们的案例中,87% 的设备是摩托罗拉。
  • 对我们来说 96% 是 OPPO。这还有什么?
  • 对我们来说是 100% Oppo。猜猜这什么时候发生?我的意思是在后台服务或 UI 渲染中?

标签: android concurrency timeout java.util.concurrent timeoutexception


【解决方案1】:

我们通过停止FinalizerWatchdogDaemon 解决了这个问题。

public static void fix() {
    try {
        Class clazz = Class.forName("java.lang.Daemons$FinalizerWatchdogDaemon");

        Method method = clazz.getSuperclass().getDeclaredMethod("stop");
        method.setAccessible(true);

        Field field = clazz.getDeclaredField("INSTANCE");
        field.setAccessible(true);

        method.invoke(field.get(null));

    }
    catch (Throwable e) {
        e.printStackTrace();
    }
}

您可以在应用程序的生命周期中调用该方法,例如attachBaseContext()。 出于同样的原因,您也可以指定手机的制造商来解决问题,这取决于您。

【讨论】:

    猜你喜欢
    • 2014-07-24
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多