web-dev-qa-db-fra.com

Une ressource a été acquise à la trace de pile attachée mais n'a jamais été libérée. Voir Java.io.Closeable pour plus d'informations sur la prévention des fuites de ressources.

je reçois ce message dans logcat Une ressource a été acquise à la trace de pile attachée mais n'a jamais été publiée. Voir Java.io.Closeable pour plus d'informations sur la prévention des fuites de ressources. où chercher une fuite et que signifie "Voir Java.io.Closeable" 

25
dreamer1989

Cela signifie que vous avez ouvert quelque chose sans jamais le fermer. Closable avez une méthode close que vous devez appeler pour libérer les ressources associées au composant lorsque vous n'en avez plus besoin. 

Pour rechercher la fuite, vous pouvez essayer MAT , je l'utilise souvent pour rechercher des fuites de mémoire (données statiques contenant une référence à Activity, etc.). 

13
suitianshi

si vous voyez quelque chose comme:

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)

dans votre stacktrace, il existe un bogue connu dans les anciennes versions de okhttp que vous pouvez éviter en forçant l'utilisation d'une version plus récente dans votre fichier gradle.

compiler 'com.squareup.okhttp3: okhttp: 3.2.0'

cela a résolu un problème très similaire pour moi au moins.

5
erbsman

Pour moi, le problème est dû au fait que j'ai surchargé la méthode onBackPressed() sans appeler le super().

@Override
public void onBackPressed() {
    //some coding here
    super.onBackPressed();
}
5
superpuccio

Le même message d'erreur apparaît également en cas de problème dans AndroidManifest.xml. Pour moi, la balise <activity> est sortie accidentellement de <application>

C'est correct:

<application ... >
    ...
    <activity ... />
</application>

Cela entraînera "Une ressource a été acquise à la trace de pile attachée mais n'a jamais été libérée" au démarrage de l'activité

<application ... >
    ...
</application>

<activity ... />
2
ByteHamster

Cela m'est arrivé lors du lancement d'une deuxième activité à partir d'une autre activité alors que je n'avais pas déclaré la deuxième activité dans Application.mk.

0
antonkronaj