调用FileLock :: tryLock()方法

时间:2017-06-15 17:51:00

标签: java android filelock

我正在使用Android SyncAdapter和域驱动设计(DDD)功能开发多进程解决方案。

登录后,需要下载一些数据才能继续。然后我手动启动SyncAdapter并(意图)await ultil结束。

SyncAdapter在不同的进程中运行,我需要在同步结束之前显示用户未确定的进度。之后,我关闭了进度,生命继续奇妙......但是!!!

在同步过程中,我创建了一个文件,以便通知其他进程正在进行处理:

@Override
    public Locker lock(String lockerName) {
        final File file = context.getFileStreamPath(lockerName);
        try {
            final RandomAccessFile lockFile = new RandomAccessFile(file, "rws");
            final FileLock fileLock = lockFile.getChannel().lock();
...

好的,这非常有效...... 在应用程序进程中,在验证线程(RxJava Interval)中我这样做:

@Override
    public boolean isLocked(String lockerName) {
        final File file = context.getFileStreamPath(lockerName);
        try {
            final RandomAccessFile lockFile = new RandomAccessFile(file, "rws");
            final FileLock fileLock = lockFile.getChannel().tryLock();
            boolean result = fileLock == null;
...

我得到以下结果/异常:

  

java.io.IOException:fcntl失败:EAGAIN(再试一次)       在java.nio.FileChannelImpl.basicLock(FileChannelImpl.java:123)       在java.nio.FileChannelImpl.tryLock(FileChannelImpl.java:181)       在java.nio.channels.FileChannel.tryLock(FileChannel.java:584)       在ch4k4uw.easysale.domain.service.SimpleInterProcessSyncAccessDomainService.isLocked(SimpleInterProcessSyncAccessDomainService.java:69)

     

...

     

android.system.ErrnoException:fcntl失败:EAGAIN(再试一次)       at libcore.io.Posix.fcntlFlock(Native Method)       在libcore.io.ForwardingOs.fcntlFlock(ForwardingOs.java:70)       在java.nio.FileChannelImpl.basicLock(FileChannelImpl.java:121)       在java.nio.FileChannelImpl.tryLock(FileChannelImpl.java:181)       在java.nio.channels.FileChannel.tryLock(FileChannel.java:584)       在ch4k4uw.easysale.domain.service.SimpleInterProcessSyncAccessDomainService.isLocked(SimpleInterProcessSyncAccessDomainService.java:69)

如果锁定失败,FileLock::tryLock()是否应返回null?

我做错了吗?有没有其他方法可以在不使用Android服务的情况下按照DDD概念进行这种进程间通信?

感谢。

PS: 我正在使用三星Galaxy J7 METAL设备进行测试。

0 个答案:

没有答案