AssetManager $ AssetInputStream.finalize()在10秒后超时

Guy*_*Guy 15 crash performance android samsung-mobile

我们在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)
Run Code Online (Sandbox Code Playgroud)

帮助任何人?

Raj*_*mar 3

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

    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();
    }
Run Code Online (Sandbox Code Playgroud)

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

相反,您可以ioStream = nullcatch/finally {}块中分配。

catch (Exception ex) {
  // If ioStream object is outside the try block
  ioStream = null;
}
Run Code Online (Sandbox Code Playgroud)