sto ricevendo questo messaggio in logcat Una risorsa è stata acquisita nello stack stack allegato ma mai rilasciata. Vedi java.io.Closeable per informazioni su come evitare perdite di risorse. dove cercare perdite e cosa significa "Vedi java.io.Closeable"Una risorsa è stata acquisita nello stack stack allegato ma mai rilasciata. Vedere java.io.Closeable per informazioni su come evitare perdite di risorse
risposta
Ciò significa che hai aperto qualcosa ma non le hai mai chiuse. Closable
hanno un metodo close
che è necessario chiamare per rilasciare le risorse associate al componente quando non è più necessario.
Per cercare la perdita, è possibile provare MAT
, lo uso spesso per trovare perdite di memoria (dati statici contenenti un riferimento all'attività, ecc.).
Lo stesso messaggio di errore viene visualizzato anche quando c'è un problema in AndroidManifest.xml
. Per me, il tag <activity>
andato accidentalmente fuori <application>
Questo è corretto:
<application ... >
...
<activity ... />
</application>
Questo si tradurrà in "Una risorsa è stata acquisita in allegato traccia dello stack ma mai rilasciato" quando si inizia l'attività:
<application ... >
...
</application>
<activity ... />
Questo è successo a me, mentre il lancio di una seconda attività da un'altra attività quando non mi dichiaro la seconda attività in Application.mk.
Per me il problema è accaduto perché ho calpestato il metodo onBackPressed()
senza chiamare il super()
@Override
public void onBackPressed() {
//some coding here
super.onBackPressed();
}
se si vede qualcosa di simile:
10-12 16:46:44.719 2710-2719/? E/StrictMode: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
10-12 16:46:44.719 2710-2719/? E/StrictMode: java.lang.Throwable: Explicit termination method 'end' not called
10-12 16:46:44.719 2710-2719/? E/StrictMode: at dalvik.system.CloseGuard.open(CloseGuard.java:184)
10-12 16:46:44.719 2710-2719/? E/StrictMode: at java.util.zip.Inflater.<init>(Inflater.java:82)
10-12 16:46:44.719 2710-2719/? E/StrictMode: at com.android.okio.GzipSource.<init>(GzipSource.java:57)
10-12 16:46:44.719 2710-2719/? E/StrictMode: at com.android.okhttp.internal.http.HttpEngine.initContentStream(HttpEngine.java:490)
nel vostro stacktrace, c'è un bug noto in anziani versioni di okhttp che puoi evitare forzando l'uso di una versione più recente nel tuo file gradle.
compilazione 'com.squareup.okhttp3: okhttp: 3.2.0'
che ha risolto un problema molto simile per me almeno.
Il mio errore è stato causato abilitando la modalità rigorosa. Quando eseguivo le ridistribuzioni su un telefono di prova utilizzando adb, alcune risorse non erano state chiuse correttamente.
I "fisso" l'errore rimuovendo deathPenalty dalla modalità rigorosa:
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectAll()
.penaltyLog()
// .penaltyDeath()
.build());