gpt4 book ai didi

android - EditText 导致 Activity 泄漏。当前的 stackoverflow 答案没有帮助

转载 作者:搜寻专家 更新时间:2023-11-01 08:33:34 24 4
gpt4 key购买 nike

我有一段开启了 Android 严格模式、VmPolicy detectAll 和 Penalty Death 的代码。这在应用程序中打开。

所以它可以帮助我检测内存泄漏。我的代码很简单,2 个 Activity (几乎是空白)。 MainActivity 有一个按钮单击以打开 SubActivity。 SubActivity 只有一个 EditText。

代码可以在这里获得https://github.com/elye/issue_edittextleak

如果您运行代码,从 MainActivity 转到 SubActivity,然后返回 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 已泄漏。

为什么SubActivity会泄露,因为它有EditText。移除它会导致它不再泄漏。

这发生在 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 上。

我查了很多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 的情况下防止泄漏?

最佳答案

我认为这个问题与编辑文本无关,因为来自严格模式日志 SubActivity;实例=2; limit=1 很明显,您有两个 subActivity 实例。发生这种情况是因为在每次启动 subActivity 时您都在创建它的一个新实例,这个问题可以通过在启动 subActivity 时使用启动模式标志 singleInstancesingleTask 来解决。保证只能存在一个 Activity 实例。

编辑 1:

我试过你的代码,发现这个问题在 Emulated Nexus 5 的 v19 上可以重现。我很清楚这个问题与编辑文本无关,因为即使 subActivity 没有与之相关的 View 。正如此 Stack Oveflow 中的回答帖子,正如该链接指出的那样,这可能是严格模式下的错误

If an Activity is started, and exited and restarted very quickly, you can get a StrictMode.InstanceCountViolation.

However this is simply because the garbage collector has not yet finalized the first instance of the Activity, meaning there are temporarily 2 (or more) instances in memory.

Calling System.gc() before startActivity() or startActivityForResult() will stop the StrictMode.InstanceCountViolation

来自安卓DOcs

Don't feel compelled to fix everything that StrictMode finds. In particular, many cases of disk access are often necessary during the normal activity lifecycle. Use StrictMode to find things you did by accident. Network requests on the UI thread are almost always a problem, though.

关于android - EditText 导致 Activity 泄漏。当前的 stackoverflow 答案没有帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38670844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com