android 文件存取可以跨进程吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 文件存取可以跨进程吗相关的知识,希望对你有一定的参考价值。

参考技术A 好像不可以 参考技术B Activity的跨进程访问与进程内访问略有不同。虽然它们都需要Intent对象,但跨进程访问并不需要指定Context对象和Activity的 Class对象,而需要指定的是要访问的Activity所对应的Action(一个字符串)。有些Activity还需要指定一个Uri(通过 Intent构造方法的第2个参数指定)。
android系统中有很多应用程序提供了可以跨进程访问的Activity,例如,下面的代码可以直接调用拨打电话的Activity。本回答被提问者采纳

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

【中文标题】如何在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跨进程通信

android中的跨进程是啥意思

android 史上最简单易懂的跨进程通讯(Messenger)!

Android跨进程通信Messenger

Android IPCAIDL实现跨进程通信

Android跨进程通信AIDL服务