Intereting Posts
Не удалось найти класс com.google.firebase.FirebaseOptions ' Фоновые изображения перескакивают, когда адресная строка скрывает iOS / Android / мобильный Chrome Как проверить (цифровую) идеальную для пикселя разработку в Android? Как замаскировать EditText, чтобы показать формат даты dd / mm / yyyy Custom Seekbar с эффектом маскировки с двумя чертежами? Ошибка: выполнение не выполнено для задачи ': app: transformClassesWithDexForDebug' в андроид-студии Как я могу прочитать bytearray из HttpResponse? Android In App Billing … Почему существует противоречащая информация? Как использовать новый ускоренный avd GPU? Создание пользовательского шаблона для Android Studio Исходный ресурс Android не найден? Определите, будет ли просмотр списка останавливать прокрутку? Android Studio запускает приложение / тест напрямую, если ничего не меняется Как определить, когда кнопка нажата и отпущена на Android Как получить круглую тему диалога для деятельности

Open failed: EBUSY (занятое устройство или ресурс)

У меня странная ошибка в моем приложении.

В моем приложении можно скачать zipFile, прочитать содержимое как то, что оно есть, а также удалить его. Не имеет значения, что именно.

Проблема: только на Motorola Xoom (версия 4.0.4) я могу загрузить файл, разархивировать его, я могу прочитать данные, и я могу удалить все. Но если я попытаюсь снова загрузить файл, а при распаковке файла и скопировать файлы на SD-карту, он сработает с ошибкой EBUSY (устройство или ресурс занят).

  1. Почему он работает только в первый раз?
  2. Что означает эта ошибка?
  3. Почему я получаю эту ошибку только на Xoom?

Я не могу найти для этого никакого решения. На всех других устройствах он работает нормально, никаких ошибок или проблем.

LogCat:

07-18 12:27:46.774: E/PrepareMagTask(10057): IOException 07-18 12:27:46.774: E/PrepareMagTask(10057): java.io.FileNotFoundException: /mnt/sdcard/Android/data/com.xxxxxx.android/files/content/23760/emag.db: open failed: EBUSY (Device or resource busy) 07-18 12:27:46.774: E/PrepareMagTask(10057): at libcore.io.IoBridge.open(IoBridge.java:406) 07-18 12:27:46.774: E/PrepareMagTask(10057): at java.io.FileOutputStream.<init>(FileOutputStream.java:88) 07-18 12:27:46.774: E/PrepareMagTask(10057): at java.io.FileOutputStream.<init>(FileOutputStream.java:73) 07-18 12:27:46.774: E/PrepareMagTask(10057): at com.xxxxx.android.util.io.ZipHelper.uncompressEntry(ZipHelper.java:35) 07-18 12:27:46.774: E/PrepareMagTask(10057): at com.xxxxx.android.task.PrepareMagTask.doInBackground(PrepareMagTask.java:271) 07-18 12:27:46.774: E/PrepareMagTask(10057): at com.xxxxx.android.task.PrepareMagTask.doInBackground(PrepareMagTask.java:1) 07-18 12:27:46.774: E/PrepareMagTask(10057): at android.os.AsyncTask$2.call(AsyncTask.java:264) 07-18 12:27:46.774: E/PrepareMagTask(10057): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 07-18 12:27:46.774: E/PrepareMagTask(10057): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 07-18 12:27:46.774: E/PrepareMagTask(10057): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 07-18 12:27:46.774: E/PrepareMagTask(10057): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 07-18 12:27:46.774: E/PrepareMagTask(10057): at java.lang.Thread.run(Thread.java:856) 07-18 12:27:46.774: E/PrepareMagTask(10057): Caused by: libcore.io.ErrnoException: open failed: EBUSY (Device or resource busy) 07-18 12:27:46.774: E/PrepareMagTask(10057): at libcore.io.Posix.open(Native Method) 07-18 12:27:46.774: E/PrepareMagTask(10057): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) 07-18 12:27:46.774: E/PrepareMagTask(10057): at libcore.io.IoBridge.open(IoBridge.java:390) 07-18 12:27:46.774: E/PrepareMagTask(10057): ... 11 more 

Он сбой по строке 35 в моем классе ZipHelper:

 FileHelper.copy(zipFile.getInputStream(entry), new FileOutputStream(outputFile), modify); 

GetInputStream (запись) … и я действительно не знаю почему?

Есть ли способ ждать устройства или регресса, когда он занят? Это случается каждый раз, когда я пытаюсь разархивировать файл, приложение пытается его 5 раз (загрузка -> Разархивировать), и он каждый раз падает.

EDIT: Мы узнали, это не только Xoom. У нас также есть ошибка с Asus Transformer с версией 4.0.4

У меня большой ответ! Проблема исходит от системы Android или / и системы FAT32. Я не могу объяснить, как система получает ошибку, она имеет какое-то отношение к удалению файлов и системы FAT32.

Но решение очень просто: перед удалением каталога или файла: переименуйте его!

Код для переименования:

 final File to = new File(file.getAbsolutePath() + System.currentTimeMillis()); file.renameTo(to); to.delete(); 

То есть, если вы переименуете папку или файл перед ее удалением, у системы нет возможности снова попытаться открыть существующий файл или открыть файл, который вы хотите сохранить снова (или что-то вроде этого).

Эта проблема может быть вызвана

  • Два или более ссылки на процесс одного и того же файла

  • Файл был удален, но ссылка не будет убита

Тем не менее, удалил его, только одна ссылка была убита, или один или несколько ссылок на обработку этого файла также

Вы можете шаг за шагом:

Перед удалением файла, который вы должны

  • adb shell lsof | grep "com.xxxxxx.android"

Файл, который вы открыли, и какой процесс ссылается на файл, который вы открыли. Также, эта команда, покажите нам идентификатор процесса

чем,

  • adb shell ls -al /proc/%d/fd

Сюрприз ждет вас, O (∩_∩) O

удачи!

Кажется, это затяжная блокировка файловой системы. Я исправил его, не касаясь моего кода, я думаю, что это было отключением USB-кабеля и его повторным подключением.

Получалась такая же ошибка, пыталась отключить питание, перезапустить eclipse и т. Д., Но ничего не работало. Наконец, пришлось перезагрузить телефон, и все откинулось на место;)

Спасибо, что поставили меня на правильном пути!

Я заметил эту ошибку в Sony Xperia, когда файл в каталоге не закрыт после записи некоторого содержимого в него, и я пытаюсь получить доступ (изменить / удалить) каталог.

Обязательно закройте файл. Убедитесь, что программа не обращается к вашим файлам. Тогда вы не столкнетесь с этой ошибкой.

Если вы не уверены, что любая программа может получить доступ к вашему каталогу, обязательно удалите (/ закрыть) все файлы в каталоге перед удалением каталога.

Adb reboot – это один из способов закрыть открытые файлы. Но это не очень хороший вариант.

Я понимаю, что это старая проблема, и изначально сообщалось о специфике XOOM, но если OP имел открытый FileOutputStream, который не был должным образом закрыт, то есть через блок finally, то это, скорее всего, то, что вызывает ресурс. При попытке ссылаться на нее позже … даже если физический файл был фактически удален.

Сообщение rm: could not remove directory (code EBUSY) , означает, что какое-либо приложение или процесс использует этот каталог.

Для меня это обычно означает, что AndroidStudio, Webstorm или другая среда разработки открыты. Если у вас открыта среда IDE, ее закрытие может освободить процесс для удаления папки. После закрытия просто запустите удаление.