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 を取得できる間にリークを防ぐにはどうすればよいでしょうか?