我有一个开启 Android 严格模式、VmPolicy detectAll 和 Penalty Death 的代码。这在应用程序中打开。
所以它可以帮助我检测内存泄漏。我的代码很简单,2 个活动(几乎是空白)。MainActivity 有一个按钮单击以打开 SubActivity。SubActivity 只有一个 EditText。
代码可以在这里获取https://github.com/elye/issue_edittextleak
如果您运行代码,从 MainActivity 转到 SubActivity,然后返回 MainActivity(使用 Back Key),然后转到 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 已经泄露。
为什么 SubActivity 泄露,因为它有 EditText。删除它会导致它不再泄漏。
这发生在三星 S5 Lollipop 5.0 (v21) 上。它还在 KitKat (v19) 上泄漏。它不会发生在三星 S7 Marshmallow 和 Nexus 6 (Nougat) 上。
Emulated Nexus 5 Lollipop 5.0.2 (v21) 不会发生这种情况。但是发生在 Emulated Nexus 5 的 v19 上。
我检查了许多stackoverflow,但找不到解决方案。您将在https://medium.com/@elye.project/hell-level-4-unleashed-by-android-strict-mode-dare-you-challenge-it中阅读有关此问题的更多详细信息以及我的探索-1dc9048bb4fb#.aiffbdikn
那我想要什么? 我认为 Lollipop 5.0.2 及更高版本上的内存泄漏已得到解决。但是对于之前的版本,我如何在可以拥有editText的同时防止泄漏?