【问题标题】:AssetManager$AssetInputStream.finalize() timed out after 10 secondsAssetManager$AssetInputStream.finalize() 10 秒后超时
【发布时间】:2015-02-07 12:55:40
【问题描述】:

我们在 Android 4.3 Samsung Galaxy s3 上看到以下崩溃流

java.util.concurrent.TimeoutException: android.content.res.AssetManager$AssetInputStream.finalize() timed out after 10 seconds
       at android.content.res.AssetManager$AssetInputStream.close(AssetManager.java:559)
       at android.content.res.AssetManager$AssetInputStream.finalize(AssetManager.java:592)
       at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:187)
       at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:170)
       at java.lang.Thread.run(Thread.java:841)

帮助任何人?

【问题讨论】:

  • 您是否偶然使用了 Crashlytics?
  • @plinehan 我愿意。连接了吗?
  • 这是我目前的理论。它在去年 3 月左右在 Crashlytics 更新后开始在我们的应用程序中发生,一些 Twitter 员工确认他们看到了类似的崩溃并最终恢复了 Crashlytics 版本。我已经更新到最新版本的 Crashlytics,我会看看它是否对这次崩溃有任何改进,但要过几周才能将它发布给公众。
  • 我遇到了这样的崩溃,在检查手机类型后意识到这是黑莓手机,而不是真正的安卓手机。
  • 有人找到任何解决方案吗?我在 SM-G900I,5.0 中也发现了问题

标签: android performance crash samsung-mobile


【解决方案1】:

每当您使用 StreamReader/StreamWriter 类进行读/写操作时,请确保您在第一个 try{} 块内调用 ioStream.close()。像这样的:

    AssetManager AssetManager = mContext.getAssets();
    try {
        InputStream is = AssetManager.open("sample.json");
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();
    } catch (Exception ex) {
        ex.printStackTrace();
    }

即使你在catch/finally {} 块下还有另一个try{} 块,它仍然会抛出异常。

相反,您可以在 catch/finally {} 块中分配 ioStream = null

catch (Exception ex) {
  // If ioStream object is outside the try block
  ioStream = null;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-19
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 2012-04-08
    • 2017-03-03
    • 2017-05-18
    相关资源
    最近更新 更多