如何在android中实现跨进程锁?
Posted
技术标签:
【中文标题】如何在android中实现跨进程锁?【英文标题】:How to implement cross process lock in android? 【发布时间】:2014-05-27 15:31:58 【问题描述】:我正在编写一个库项目供多个 APP 使用。而且由于某种原因,我必须为不同的APP做一个功能互斥,所以我需要一个跨进程锁。但据我所知,在android APP中只能写入内部存储中自己的文件目录,而外部存储是不可靠的,因为有些设备没有。所以文件锁似乎对我不适用,那么有没有其他方法可以实现跨进程锁呢?
谢谢~
【问题讨论】:
【参考方案1】:如果您不想(或不能)使用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;
【讨论】:
谢谢!我对此进行了简要测试,它似乎在我的手机上运行良好:Sony Xperia M (Cyanogenmod 12.1)以上是关于如何在android中实现跨进程锁?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xamarin.Android 中实现 RewardedAdLoadCallback?