3

このリンクを見たので、排他的アクセスのためにファイルをロックできると思います: http://developer.android.com/reference/java/nio/channels/FileLock.html

バックグラウンド プロセス (サービス) と実際のフォアグラウンド アプリの両方で、ファイルの保存/読み込みを作成したいと考えています。彼らは同時にこのファイルにアクセスしようとするかもしれませんが、その場合は待つ必要があります。

Android で FileLock の実際のサンプルを見つけることができませんでした。Android ではこれができないという多くのスレッドを読んだだけです。しかし、もしそうなら、ドキュメントに「FileLock」のセクションがあるのはなぜですか?

4

4 に答える 4

7

これは、通常の Java アプリケーションで機能します。

File file = ...;
FileInputStream fis = new FileInputStream(file); // or FileOutputStream fos = new FileOutputStream(file);
FileLock lock = fis.getChannel().lock(); // or FileLock lock = fos.getChannel().lock();

// do whatever you want with the file

lock.release();
于 2013-02-28T18:46:27.860 に答える
2

FileLock は FileInputStream で機能しますが、共有ロックとして取得された場合にのみ機能します。

  FileInputStream fis = new FileInputStream(file + ext);
  FileChannel fileChannel = fis.getChannel();
  FileLock fileLock = fileChannel.tryLock(0L, Long.MAX_VALUE, /*shared*/true);

実際、これは理にかなっています。共有ロックとは、同時読み取りはいくつでも可能ですが、書き込みは許可されないことを意味します。一方、デフォルトの排他的ロックでは、書き込みへの排他的アクセスがプロセスに与えられます。FileInputStream では書き込みができないため、共有ロックを取得する必要があります。

于 2015-11-04T09:09:40.637 に答える