1

我的应用程序必须监视对目录的文件更改,并在进行更改时上传副本。为此,我使用了FileObserver. 我将它上传到创建、移动到、关闭写入和修改。问题在于修改。每次将更改写入磁盘时都会调用 Modify很多次,它崩溃了。我的第一个想法是删除修改事件,以便仅在调用 Close Write 时上传。不幸的是,这并不总是被调用。所以我有点坚持修改。所以我的问题是:在检测文件修改结束时是否有最佳实践?我需要在修改完成后上传此文件,而不是同时。你会怎么做呢?如何发现最后一个 Modify 事件何时触发。我是否必须制作一个复杂的计时器系统,还是有更简单的方法。(如果没有,你能告诉我制作这样一个计时器系统的最佳实践吗?)

我知道我已经问了很多,但我会很感激任何头脑风暴和想法。

谢谢!

编辑:所以我发现了一些奇怪的东西。至少在 Android 4.2 上,Open永远不会触发,因此close永远不会触发。仅供参考。

4

3 回答 3

1

如果文件是基于文本的,您可以区分原始文件和修改后的文件,并且仅在不同行数足够大时才上传文件。

于 2013-07-24T19:06:25.083 回答
1

使用工作线程每 x 秒测试一次文件的更改,如果更改,则将更新的版本发送到您需要的任何地方。为了避免发送正在编写的文件,请测试 File.isOpen 或使用布尔值来跟踪发生的更改。

于 2013-07-24T19:17:03.763 回答
1

运气好的话,可能会做一些事情,比如跟踪修改事件之间的时间,假设它们或多或少一致地收到……

 last-notification = now;
 notification-interval = 1 s; /* some default */
 listen for (file closed);
 listen for (file modified);
 alarm at (now + notification-interval);

 on (file modified) =
      cancel alarm;
      notification-interval = max ( notification-interval
                                  | [now - last-notification] );
      alarm at (now + 2 × notification-interval);

 on (file closed) =
      cancel alarm;
      do upload;

 on (alarm) =
       if (file is open?) then alarm at (now + 2 × notification-interval);
       else (signal file closed)
于 2013-07-24T19:30:13.973 回答