java.io.IOException的WebView崩溃:关闭失败:EIO(I/O错误)libcore.io.IoUtils.close(IoUtils.java:41)

Riv*_*ver 21 android android-webview webviewclient

我在Android 4.0/4.1上有用户上传崩溃日志,但我无法重现它.日志是这样的:

java.io.IOException: close failed: EIO (I/O error)
libcore.io.IoUtils.close(IoUtils.java:41)
java.io.FileInputStream.close(FileInputStream.java:121)
android.webkit.JWebCoreJavaBridge.nativeServiceFuncPtrQueue(Native Method)
android.webkit.JWebCoreJavaBridge.handleMessage(JWebCoreJavaBridge.java:113)
android.os.Handler.dispatchMessage(Handler.java:99)
android.os.Looper.loop(Looper.java:137)
android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:949)
java.lang.Thread.run(Thread.java:856)
cause by:
libcore.io.ErrnoException: close failed: EIO (I/O error)
libcore.io.Posix.close(Native Method)
libcore.io.BlockGuardOs.close(BlockGuardOs.java:75)
libcore.io.IoUtils.close(IoUtils.java:38)
java.io.FileInputStream.close(FileInputStream.java:121)
android.webkit.JWebCoreJavaBridge.nativeServiceFuncPtrQueue(Native Method)
android.webkit.JWebCoreJavaBridge.handleMessage(JWebCoreJavaBridge.java:113)
android.os.Handler.dispatchMessage(Handler.java:99)
android.os.Looper.loop(Looper.java:137)
android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:949)
java.lang.Thread.run(Thread.java:856)
Run Code Online (Sandbox Code Playgroud)

有谁知道它是如何发生的?或者如何解决它?

Mah*_*ade 5

这是由于只读文件而发生的.

我认为这是因为EIO来自bad_file_flush您的文件.当内核访问文件时出现任何故障时,它会将打开的文件描述转换为带有bad_inode_ops的伪打开文件作为其文件操作.我找不到为基于FAT的文件系统执行此操作的代码,但也许有一些通用代码.

由于FileChannel缓存数据,我认为你需要先调用force()close() the FileChannel

有关更多信息,请通过此链接 Link1