2012-04-11 63 views
2

我有一个列表视图,其中可能包含15行。每行(列表项)包含2个文本字段。为什么滚动listview增加内存使用量很多?

当我第一次创建列表视图时,几乎没有内存使用情况,但现在我触摸它滚动,内存使用增加了〜2 MB。

这往往会使GC运行,这使得滚动非常不连贯。

我重复使用视图,所以这不可能。有任何想法吗?

+0

我的猜测是,这是因为scrollview缓存了你已经查看过的项目(因为你不需要在下一次访问时再次获取它们)。不知道有什么来控制这一点。 – kosa 2012-04-11 16:08:22

+2

您应该发布适配器代码。也许有什么关系。 – dmon 2012-04-11 16:29:53

回答

2

如果您启用了drawingCache(默认情况下),则每个子视图在滚动期间都会呈现为位图。这会增加内存使用量,但不应与您体验的不稳定性有关。 你是否在bindView/getView方法中做了任何额外的步骤(比如分配位图)?

+0

这的确是原因。这导致了不稳定的原因是因为该应用程序接近堆限制并且不得不做很多GC调查。但请注意,这只是在仿真器上,尚未在真实设备上进行测试。 我猜测,关闭缓存可能意味着交易内存使用的CPU周期,但只有在ListView中使用文本才会真正有意义吗? – eriknn 2012-04-13 08:00:50

+0

我认为简单地将位图爆炸到表面上总是比渲染视图更快,即使它只是一个简单的TextView。我认为,如果你渲染一个TextView,那么系统仍然需要将尽可能多的像素放到表面上,就像将位图复制到该表面上一样。此外,您还有textviews渲染逻辑和文本栅格化的开销。把它们加起来。我认为内存开销非常值得,而且我从来没有在任何真实设备上遇到问题。 – Renard 2012-04-13 09:17:01

相关问题