Мое приложение должно следить за изменениями файлов в каталоге и загружать их при каждом изменении. Для этого я использовал использование FileObserver
. У меня есть загрузка на Creation, Move To, Close Write и Modify. Проблема заключается в модификации. Modify вызывается каждый раз, когда изменение записывается на диск, который, если файл большой (скопированный или много измененный), не является атомарным, поэтому он запускает сотни событий Modify, это делает мое приложение уродным, потому что оно пытается загрузить так много раз, и он падает. Моя первая мысль заключалась в том, чтобы удалить событие изменения, чтобы оно загружалось только при вызове метода «Закрыть запись». К сожалению, это не всегда называется. Поэтому я немного застрял в Modify. Поэтому мой вопрос заключается в следующем: есть ли лучшая практика, когда дело доходит до обнаружения изменения файла? Мне нужно загрузить этот файл, когда он будет изменен, а не пока. Как бы вы это сделали? Как я могу узнать, когда вызывается последнее событие Modify. Должен ли я создавать сложную систему таймера, или есть более простой способ. (Если нет, не могли бы вы рассказать мне о лучшей практике создания такой системы таймера?)Умный способ загрузки файлов на основе изменений
Я знаю, что я много просил, но я был бы признателен за любые мозговые штурмы и идеи.
Спасибо!
Редактировать: Итак, я нашел что-то странное. По крайней мере, на Android 4.2, Open
никогда не срабатывает, поэтому close
никогда не срабатывает. Просто FYI.
'File.isOpen()'? Это звучит полезно, если я могу его найти. О чем ты говоришь, это какая-то библиотека? –
Используйте FileObserver и отслеживайте события open/close. Вы также можете использовать FileLock http://developer.android.com/reference/java/nio/channels/FileLock.html для обеспечения взаимного доступа к файлу. Если к файлу обращаются последовательно, используйте переменную типа boolean. –
Хорошо, я сделал ... вроде этого. Я использовал hashmap и timertask для того, чтобы помешать множественным событиям за десять секунд задержки. Благодаря! –