Подтвердить что ты не робот

Ошибка 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)

Кто-нибудь знает, как это происходит или как его решить?

4b9b3361

Ответ 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()