【问题标题】:Android FileLock...how to lock files from different processesAndroid FileLock ...如何锁定来自不同进程的文件
【发布时间】:2013-01-08 17:12:48
【问题描述】:

我需要锁定一个从三个不同的 android 应用程序读取和写入的文本文件......所以不同的进程。

我尝试在写入时使用通道 lock()(独占模式),在读取文件时使用 lock(0L, Long.MAX_VALUE, true)(共享)。

不幸的是,这种方法不起作用...在读取时总是获取锁,当写入锁尚未释放时也是如此。

是否有合适且可行的示例来解决此问题? 我做错了吗?

【问题讨论】:

  • “我做错了吗?” -- 您正试图让三个独立的应用程序同时处理同一个文本文件。就我而言,这就是“有问题”。
  • 文件锁应该可以解决这类问题。我不认为对同一个文件进行并发访问的三个应用程序被认为是错误的。顺便说一句,你有什么建议吗?
  • “我不认为三个应用程序同时访问同一个文件是错误的”——当然欢迎您提出意见。 “你有什么建议吗?” - 当然。让一个应用拥有数据。让其他两个应用通过 Android 内置的任何可用 IPC 机制与第一个应用通信,例如内容提供程序、远程服务(命令或绑定模式)和广播。
  • 我已经解决了这个问题...看我的答案。
  • @CommonsWare :我认为应用程序永远不会拥有数据,用户拥有。用户可能需要不同的应用程序来处理他们的数据,这些应用程序可能彼此不认识。文件是最通用、最简单的数据存储方式。所以在某些情况下,不同的应用程序需要访问同一个文件。这就是设计文件锁的原因。

标签: android file locking


【解决方案1】:

我终于解决了! FileLocks 没问题...我的问题是我正在使用 storeToXml 写入一个 xml 文件,该文件可能会创建一个全新的文件...因此创建了新的文件描述符并且锁定属性可能丢失了。 现在我锁定了另一个虚拟文件,而不是我正在读写的文件,一切都按预期工作。

【讨论】:

  • 能否发一些代码来显示两种情况(文件描述符丢失和未丢失),以便我们学习?
  • 现在我很难进入那个旧代码......我唯一可以告诉你的是,我没有锁定我正在编写的文件,而是使用不同的空文件作为锁定结束文件。所以我确信在锁被释放之前没有人会触摸或修改它。
猜你喜欢
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
相关资源
最近更新 更多