我的应用程序来监视文件更改到一个目录,然后上传副本每当更改。为此,我已经使用了FileObserver
。我已将它上传到创建,移动到,关闭写入和修改。问题在于修改。修改被称为每次更改写入磁盘时,如果文件较大(被复制或很多改变)不是原子,因此触发数百修改的事件,这使我的应用程序怪胎,因为它试图上传等等很多次,它崩溃。我的第一个想法是删除修改事件,以便它只会在调用Close Write时上传。不幸的是,这并不总是被称为。所以我有点卡住修改。所以我的问题是这样的:在检测文件修改结束时是否有最佳做法?我需要上传这个文件,当它被修改时,而不是。你会如何去做这件事?我怎样才能发现上次修改事件被触发的时间。我是否必须制作一个复杂的计时器系统,还是有一个更简单的方法。 (如果没有,你能告诉我做出这样的计时器系统的最佳实践?)智能方式
我知道我问了很多,但我会很感激任何头脑风暴和想法。
谢谢!
编辑:所以,我已经发现了一些奇怪的。至少在Android 4.2上,Open
从不会触发,因此close
绝不会触发。仅供参考。
'File.isOpen()'?如果我能找到它,这听起来很有用。你在说什么,这是某种图书馆? –
使用FileObserver并跟踪打开/关闭事件。您还可以使用FileLock http://developer.android.com/reference/java/nio/channels/FileLock.html确保相互访问该文件。如果您的文件是按顺序访问的,则使用布尔变量。 –
好的,我做了...这个。我使用hashmap和timertask将多个事件瓶颈到十秒钟的延迟。谢谢! –