¿Cómo comprobar FileLock sin truncar el archivo?
Recientemente he añadido filelocks a mi asistente de descarga asynctask:
FileOutputStream file = new FileOutputStream(_outFile); file.getChannel().lock();
Y después de completar la descarga, file.close()
para liberar el bloqueo.
- Utilizar controlador para publicar en UI Thread
- Android no finaliza el subproceso ASyncTask después de onPostExecution
- Comportamiento impredecible al acceder a Ver desde otro hilo
- Async tarea no funciona correctamente (doInBackground no se ejecuta) cuando el servicio se ejecuta en segundo plano, Android
- Cómo detener el lanzamiento de un hilo hecho con postDelayed
Desde un BroadcastReceiver llamado (hilo diferente), necesito ir a través de los archivos y ver qué se descargan y cuáles todavía están bloqueados. Comencé con trylock:
for (int i=0; i<files.length; i++) { try { System.out.print((files[i]).getName()); test = new FileOutputStream(files[i]); FileLock lock = test.getChannel().tryLock(); if (lock != null) { lock.release(); //Not a partial download. Do stuff. } } catch (Exception e) { e.printStackTrace(); } finally { test.close(); } }
Desafortunadamente, leí que el archivo está truncado (0 bytes) cuando se crea FileOutputStream. Lo configuré para añadir, pero el bloqueo no parece tener efecto, todos parecen estar desbloqueado (totalmente descargado)
¿Hay otra manera de comprobar si un bloqueo de escritura se aplica al archivo actualmente, o estoy usando los métodos equivocados aquí? Además, ¿hay una manera de depurar los bloqueos de archivos, desde el terminal ADB o Eclipse?
- Programación de procesos Android
- Android AsyncTask vs hilo + controlador vs rxjava
- Leer datos de sqlite cuando se está ejecutando una transacción (Android)
- Cómo establecer la prioridad de IntentService en Android
- ¿Dónde detener / destruir subprocesos en la clase de servicio de Android?
- PhoneStateListener en el subproceso de fondo
- La rotación de vista de Android no ocurre después de algunas llamadas de setAnimation
- Android: java.lang.OutOfMemoryError: falla en la creación del hilo
Nada de esto va a funcionar. Compruebe el Javadoc. Las cerraduras se llevan a cabo en nombre de todo el proceso, es decir, la JVM, no por hilos individuales.
Mi primer pensamiento sería abrirlo para añadir por los javadocs
test = new FileOutputStream(files[i], true); // the true specifies for append