如何在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中实现跨进程锁?的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中实现svm模型?

如何在android中实现BottomAppBar?

如何在 Xamarin.Android 中实现 RewardedAdLoadCallback?

如何在 Android Studio 中实现 razorpay 定期付款?

如何在Android View中实现这种布局配置

如何在 Android 应用程序中实现应用内计费?