gpt4 book ai didi

Gallery 中的 ListView 导致 Android 内存泄漏

转载 作者:搜寻专家 更新时间:2023-11-01 09:11:23 30 4
gpt4 key购买 nike

我一直在追踪我的 Android 应用程序中潜在的内存泄漏,并且遇到了一个我不确定该如何处理的问题。首先,我将描述我正在尝试做什么。

就其值(value)而言,我正在为 Eclair(2.1,API 级别 7)构建并在运行 Gingerbread(2.3.7,API 级别 10)的 HTC Incredible 上进行测试。通过观察 LogCat,我假设我的应用程序的最大堆大小约为 32MB。

我正在尝试建立一个地址簿,其中有几页联系人。您可以通过向左和向右滚动来在页面之间导航,也可以通过向上和向下滚动来浏览当前页面。为此,我使用了一个 Gallery,其适配器将联系人列表适配为 ListView,其适配器又将单个联系人适配为 RelativeLayout.

一切似乎都运行良好,但在画廊中滑动时,我真的很快就用完了 native (外部)内存。在 Gallery 上滑动一段时间后,我制作了一个 HPROF 转储并将其拉入 MAT。在直方图中,我发现我有几百个联系人 RelativeLayout,它们仅由我的联系人 ListView 保留。这是我在查看 ListView 的 [截断] MAT merge_shortest_paths 输出时发现的内容:

android.view.ViewRoot$1
+ this$0 android.view.ViewRoot
+ mAttachInfo android.view.View$AttachInfo
+ mScrollContainers java.util.ArrayList
+ array java.lang.Object[303]
+ [110], [112], [114], [116], [118], ... com.example.LeakyListView
+ ...and so forth.

唯一保留那些泄漏的 ListView 的是 android.view.View$AttachInfomScrollContainers 字段。问题是,我不知道我的观点一开始是如何进入那里的,所以我不知道如何堵住这个漏洞。

我该如何解决这个内存泄漏?或者至少,这个引用链是如何构建的,什么是 ViewRootAttachInfomScrollContainers?

我会尝试将它隔离成一个简单的测试用例,并尽快在此处发布代码,但我希望这足以开始对话。

最佳答案

对于这种事情,您真的、真的应该使用 ViewPager 而不是 Gallery:http://android-developers.blogspot.com/2011/08/horizontal-view-swiping-with-viewpager.html

关于Gallery 中的 ListView 导致 Android 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8075512/

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