Sto ricevendo la seguente violazione riportata da StrictMode in Android.StrictMode si lamenta che InputStream non viene chiuso
02-05 04: 07: 41,190: ERRORE/StrictMode (15093): Una risorsa è stata acquisita in allegato traccia dello stack, ma mai rilasciato. Vedi java.io.Closeable for informazioni su come evitare perdite di risorse. 02-05 Aprile: 07: 41,190: ERRORE/StrictMode (15093): java.lang.Throwable: terminazione esplicita metodo 'stretta' non chiama
Si cribbing di non chiudere i flussi in modo corretto. Tuttavia, non dovrebbe chiudere in
chiudere i flussi sottostanti? Quale potrebbe essere la ragione per l'errore segnalato?
private ArrayList<Uri> loadPath() {
ArrayList<Uri> uris = new ArrayList<Uri>();
if (mFile.exists()) {
ObjectInputStream in = null;
try {
in = new ObjectInputStream(new BufferedInputStream(
new FileInputStream(mFile), STREAM_BUFFER_SIZE));
ArrayList<String> strings = new ArrayList<String>();
strings.addAll((ArrayList<String>) in.readObject());
for (String string : strings) {
uris.add(Uri.parse(string));
}
} catch (Exception e) {
mFile.delete();
} finally {
IOUtils.closeQuietly(in);
}
}
return uris;
}
public static void closeQuietly(InputStream input) {
try {
if (input != null) {
input.close();
}
} catch (IOException ioe) {
// ignore
}
}
Non sono sicuro di quanto sia intelligente il correttore StrictMode, ma sembra essere confuso dal *** *** rinviato ***, ovvero utilizzando un'utilità per chiudere il flusso per te. – Perception
Nel mio caso ottengo questo errore anche quando 'close()' è in linea nella clausola 'finally'. –