1

私のアプリは、ディレクトリへのファイルの変更を監視し、変更が加えられるたびにコピーをアップロードする必要があります。これを行うために、私はFileObserver. Creation、Move To、Close Write、Modify でアップロードします。問題は変更にあります。変更がディスクに書き込まれるたびに変更が呼び出されますが、ファイルが大きい場合 (コピーされているか、大幅に変更されている) は原子的ではないため、何百もの変更イベントが発生します。何度もクラッシュします。私が最初に考えたのは、変更イベントを削除して、Close Write が呼び出されたときにのみアップロードされるようにすることでした。残念ながら、これは常に呼び出されるわけではありません。だから私はちょっとモディファイにこだわっています。私の質問は次のとおりです。ファイル変更の終わりを検出する際のベスト プラクティスはありますか? このファイルは、変更中ではなく、変更が完了したときにアップロードする必要があります。これをどのように行うつもりですか?最後の変更イベントがいつ発生したかを知るにはどうすればよいですか。複雑なタイマー システムを作成する必要がありますか? またはもっと簡単な方法があります。(ない場合は、そのようなタイマー システムを作成するためのベスト プラクティスを教えてもらえますか?)

たくさん質問したことは承知していますが、ブレインストーミングやアイデアをいただければ幸いです。

ありがとう!

編集:だから私は何か奇妙なものを見つけました。少なくとも Android 4.2 では、Open起動しないため、起動しませcloseん。参考までに。

4

3 に答える 3

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 に答える