gpt4 book ai didi

android - android中如何实现跨进程锁?

转载 作者:太空宇宙 更新时间:2023-11-03 12:54:11 24 4
gpt4 key购买 nike

我正在编写一个供多个应用程序使用的库项目。而且由于某些原因,我必须为不同的APP做一个功能互斥,所以我需要一个跨进程锁。但据我所知,在android APPs中只能写入内部存储中自己的文件目录,而外部存储是不可靠的,因为有些设备没有。所以文件锁对我来说似乎不适用,请问有没有其他方法可以实现跨进程锁?

谢谢~

最佳答案

如果您不想(或不能)使用 flock 或 fcntl,也许您可​​以使用 LocalServerSocket 来实现自旋锁。例如:

public class SocketLock {
public SocketLock(String name) {
mName = name;
}

public final synchronized void tryLock() throws IOException {
if (mServer == null) {
mServer = new LocalServerSocket(mName);
} else {
throw new IllegalStateException("tryLock but has locked");
}
}

public final synchronized boolean timedLock(int ms) {
long expiredTime = System.currentTimeMillis() + ms;

while (true) {
if (System.currentTimeMillis() > expiredTime) {
return false;
}
try {
try {
tryLock();
return true;
} catch (IOException e) {
// ignore the exception
}
Thread.sleep(10, 0);
} catch (InterruptedException e) {
continue;
}
}
}

public final synchronized void lock() {
while (true) {
try {
try {
tryLock();
return;
} catch (IOException e) {
// ignore the exception
}
Thread.sleep(10, 0);
} catch (InterruptedException e) {
continue;
}
}
}

public final synchronized void release() {
if (mServer != null) {
try {
mServer.close();
} catch (IOException e) {
// ignore the exception
}
}
}

private final String mName;

private LocalServerSocket mServer;
}

关于android - android中如何实现跨进程锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23893431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com