2

Android Strict Mode がオンになっているコード、VmPolicy detectAll および Penalty Death があります。これはアプリケーションでオンになっています。

そのため、メモリリークを検出するのに役立ちます。私のコードは非常にシンプルで、2 つのアクティビティ (ほぼ空白) です。MainActivity には、SubActivity を開くためのボタン クリックがあります。SubActivity には EditText が 1 つだけあります。

コードはここから入手できますhttps://github.com/eye/issue_edittextleak

コードを実行すると、MainActivity から SubActivity に移動し、(Back キーを使用して) MainActivity に戻り、SubActivity に移動して、戻る... でクラッシュします

E/StrictMode: class com.elyeproj.edittextleak.SubActivity; instances=2; limit=1
android.os.StrictMode$InstanceCountViolation: class com.elyeproj.edittextleak.SubActivity; instances=2; limit=1
at android.os.StrictMode.setClassInstanceLimit(StrictMode.java:1)

これは、SubActivity がリークしたことを検出したためです。

EditText があるため、SubActivity がリークした理由。外すと漏れなくなります。

これは、Samsung S5 Lollipop 5.0 (v21) で発生します。KitKat (v19) でもリークします。Samsung S7 Marshmallow と Nexus 6 (Nougat) では発生しません。

Emulated Nexus 5 Lollipop 5.0.2 (v21) では発生しません。ただし、Emulated Nexus 5 の v19 で発生します。

多くのスタックオーバーフローをチェックしましたが、解決策が見つかりません。この問題の詳細と私の調査については、https://medium.com/@eye.project/hell-level-4-unleashed-by-android-strict-mode-dare-you-challenge-itをご覧ください。 -1dc9048bb4fb#.aiffbdikn

それで、私は何をしたいですか? Lollipop 5.0.2 以降ではメモリ リークが解決されていると思います。しかし、それ以前のバージョンでは、editText を取得できる間にリークを防ぐにはどうすればよいでしょうか?

4

2 に答える 2

0

このコードを使用して SubActivity を終了します。

このコードを SubActivity クラス ファイルに追加します。

@Override
    public void onBackPressed() {
        super.onBackPressed();
        finish();
    }
于 2016-07-30T06:17:10.103 に答える