Ошибка WebView с помощью java.io.IOException: сбой закрытия: EIO (ошибка ввода-вывода) libcore.io.IoUtils.close(IoUtils.java:41)
У меня загрузился журнал сбоев пользователей на 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)
Кто-нибудь знает, как это происходит или как его решить?
Ответы
Ответ 1
Это происходит из-за файла только для чтения.
Я думаю, что это связано с тем, что EIO поставляется из bad_file_flush
в вашем файле. Кажется, что когда ядро имеет какой-либо отказ в доступе к файлу, он преобразует описание открытого файла в псевдо-открытый файл с bad_inode_ops в качестве файла ops. Я не могу найти код, который делает это для файловых систем на основе FAT, но, возможно, есть общий код.
Поскольку данные кеша FileChannel , я думаю, вам нужно позвонить force(
) перед тем, как вы close() the FileChannel
Для получения дополнительной информации перейдите по ссылкам
Link1
Ответ 2
EIO происходит от bad_file_flush
в bad_inode.c
. Кажется, что у ядра есть некоторые проблемы при доступе к inode.
Причинами этого могут быть установка-размонтирование SD-карты или носителя данных, подключение USB по телефону.
Попробуйте позвонить force()
до close()