问题
i am getting this message in logcat A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks. where to look for leak and what does it meant by \" See java.io.Closeable\"
回答1:
That means you have opened something but never close them.Closable have a method close
which you must call to release the resources associated with the component when you no longer need it.
To look for the leak, you can try MAT, I often use it to find memory leaks(static data holding a reference to Activity, etc).
回答2:
For me the problem happened because I was overriding the method onBackPressed()
without calling the super()
@Override
public void onBackPressed() {
//some coding here
super.onBackPressed();
}
回答3:
if you see something like:
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)
in your stacktrace, there is a known bug in older versions of okhttp that you can avoid by forcing the use of a newer version in your gradle file.
compile 'com.squareup.okhttp3:okhttp:3.2.0'
that solved a very similar problem for me at least.
回答4:
The same error message also shows up when there is a problem in AndroidManifest.xml
. For me, the <activity>
tag accidentally went out of <application>
This is correct:
<application ... >
...
<activity ... />
</application>
This will result in "A resource was acquired at attached stack trace but never released" when starting the activity:
<application ... >
...
</application>
<activity ... />
回答5:
This has happened to me while launching a second activity from another activity when I did not declare the second activity in Application.mk.
回答6:
My error was caused by enabling the strict mode. When I was doing redeployments on a test phone using adb, some resources were not closed correctly.
I "fixed" the error by removing deathPenalty from the strict mode:
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectAll()
.penaltyLog()
// .penaltyDeath()
.build());
来源:https://stackoverflow.com/questions/25544021/a-resource-was-acquired-at-attached-stack-trace-but-never-released-see-java-io