Bloqueo de archivos a través de servicios

¿Cuál es la mejor manera de compartir un archivo entre dos servicios de "escritor" en la misma aplicación?

Edit: Lo siento, debería haber dado más detalles, supongo.

Tengo un servicio que ahorra entradas en un amortiguador. Cuando el búfer se llena, escribe todas las entradas en el archivo (y así sucesivamente). Otro Servicio en ejecución llegará en algún momento y leer el archivo (esencialmente copiarlo / comprimirlo) y luego vaciarlo.

2 Solutions collect form web for “Bloqueo de archivos a través de servicios”

Aquí está una idea general de lo que puede hacer:

public class FileManager { private final FileWriter writer = new FileWriter("SomeFile.txt"); private final object sync = new object(); public void writeBuffer(string buffer) { synchronized(sync) { writer.write(buffer.getBytes()); } } public void copyAndCompress() { synchronized(sync) { // copy and/or compress } } } 

Usted tendrá que hacer un trabajo extra para conseguir que todo funcione a salvo, pero esto es sólo un ejemplo básico para darle una idea de cómo se ve.

Un método común para bloquear es crear un segundo archivo en la misma ubicación que el archivo principal. El segundo archivo puede contener datos de bloqueo o estar en blanco. El beneficio de tener datos de bloqueo (como un ID de proceso) es que se puede detectar fácilmente un bloqueo rancio, que es una inevitabilidad que debe planificar. Aunque PID puede no ser el mejor bloqueo de datos en su caso.

Ejemplo: Service1:

  • Crea myfile.lock
  • Crea / abre myfile

Servicio2:

  • myfile.lock que myfile.lock está presente y pausa / bloquea / espera
  • Cuando myfile.lock va, lo crea y luego abre myfile.

También sería ventajoso para usted comprobar que el archivo contiene su información de bloqueo (identificación específica a su servicio) justo después de crearlo – sólo en caso de que dos o más servicios están esperando y crear un bloqueo en el mismo tiempo. El último tiene éxito y por lo que todos los demás servicios deben notar que sus datos de bloqueo ya no está en el archivo. También – haga una pausa de unos milisegundos antes de revisar su contenido.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.