logcatでこのメッセージが表示されますリソースはアタッチされたスタックトレースで取得されましたが、リリースされませんでした。リソースリークを回避する方法については、Java.io.Closeableを参照してください。リークの検索場所とその意味「Java.io.Closeableを参照してください」
私にとっては、onBackPressed()
を呼び出さずにメソッドsuper()
をオーバーライドしていたため、問題が発生しました。
@Override
public void onBackPressed() {
//some coding here
super.onBackPressed();
}
次のようなものが表示された場合:
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'をコンパイルします
それは少なくとも私にとって非常に似た問題を解決しました。
AndroidManifest.xml
に問題がある場合にも、同じエラーメッセージが表示されます。私にとっては、<activity>
タグが誤って<application>
から外れました
これは正しいです:
<application ... >
...
<activity ... />
</application>
これにより、アクティビティが開始されたときに「アタッチされたスタックトレースでリソースが取得されたが解放されなかった」になります。
<application ... >
...
</application>
<activity ... />
これは、Application.mkで2番目のアクティビティを宣言しなかったときに、別のアクティビティから2番目のアクティビティを起動するときに起こりました。