我在logcat中收到此消息在附加堆栈跟踪中获取资源但从未发布。有关避免资源泄漏的信息,请参阅java.io.Closeable。查找泄漏的位置以及"见java.io.Closeable"
答案 0 :(得分:13)
这意味着您已经打开了一些内容但从未关闭它们。Closable
有一个方法close
,当您不再需要时,必须调用该方法以释放与该组件关联的资源。
要查找泄漏,您可以尝试MAT
,我经常使用它来查找内存泄漏(保存对Activity的引用的静态数据等)。
答案 1 :(得分:6)
对我来说问题出现了,因为我在没有调用onBackPressed()
super()
@Override
public void onBackPressed() {
//some coding here
super.onBackPressed();
}
答案 2 :(得分:5)
如果您看到类似的内容:
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)
在您的堆栈跟踪中,旧版本的okhttp中存在一个已知错误,您可以通过在gradle文件中强制使用较新版本来避免这种错误。
编译'com.squareup.okhttp3:okhttp:3.2.0'
至少为我解决了一个非常类似的问题。
答案 3 :(得分:2)
AndroidManifest.xml
出现问题时,也会显示相同的错误消息。对我而言,<activity>
标记意外退出了<application>
这是正确的:
<application ... >
...
<activity ... />
</application>
这将导致&#34;在附加堆栈跟踪时获取资源但在启动活动时从未发布&#34; :
<application ... >
...
</application>
<activity ... />
答案 4 :(得分:0)
当我没有在Application.mk中声明第二个活动时,在我从另一个活动启动第二个活动时发生了这种情况。
答案 5 :(得分:0)
对我来说,这似乎与模拟器有关,因为它通过更改为另一个模拟器而消失了。 您可以在真机上进行测试。
答案 6 :(得分:-1)
我的错误是由启用严格模式引起的。当我使用adb在测试手机上进行重新部署时,某些资源未正确关闭。
我通过从严格模式中删除deathPenalty来“修复”错误:
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectAll()
.penaltyLog()
// .penaltyDeath()
.build());