如何在android上使用FileLock



我认为我们能够锁定文件的独占访问,因为我看到这个链接:http://developer.android.com/reference/java/nio/channels/FileLock.html

我想在后台进程(服务)和真正的前台应用程序中创建一个保存/加载文件。它们可能会同时尝试访问这个文件,在这种情况下应该等待。

我在android上找不到FileLock的真实样本,我只是读了很多线程,这在android上是不可能的。但如果是这样,为什么文档中有"FileLock"一节?

这适用于普通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();
  1. 您可以尝试lock()与阻塞,trylock()不阻塞
  2. FileLockFileInputStream不起作用
  3. 在Android中,FileLock工作在进程之间,但不工作在进程内的线程之间。

FileLock在FileInputStream上工作,但只有在作为共享锁获取时才能工作。

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

实际上这是有意义的。共享锁意味着可以同时有任意数量的读取器,但不允许有写器。而默认排他锁则给予进程对写入的排他访问。由于不能使用FileInputStream进行编写,因此必须获得对其的共享锁。

我认为文件锁定在"内部"手机内存上工作,但在SD卡上不起作用。

相关内容

  • 没有找到相关文章

最新更新