资源是在附加的堆栈跟踪中获取的,但从未发布过。有关避免资源泄漏的信息,请参阅java.io.Closeable

时间:2014-08-28 08:18:17

标签: android android-strictmode

我在logcat中收到此消息在附加堆栈跟踪中获取资源但从未发布。有关避免资源泄漏的信息,请参阅java.io.Closeable。查找泄漏的位置以及"见java.io.Closeable"

7 个答案:

答案 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());