我认为我们能够锁定文件的独占访问,因为我看到这个链接: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();
- 您可以尝试
lock()
与阻塞,trylock()
不阻塞 -
FileLock
对FileInputStream
不起作用 - 在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卡上不起作用。