2

当我有 ListActivity 和 Adapter 时,Android 如何处理包含 200 个元素的列表。它是否尝试直接加载所有这些元素,它是如何等到用户滚动然后呈现这些元素的?

当列表太长时,我是否需要担心性能?

4

3 回答 3

1

取决于适配器是如何实现的。

如果您有一个没有子类化的适配器(您使用一个由 SDK 提供的适配器),Android 将尝试直接加载所有这些适配器。

我建议继承 SimpleCursorAdapter并实现您的自定义适配器。这样,您将拥有例如 10 个视图(与您的屏幕需要的一样多),并且该视图将被重用于 190 条记录的其余部分。

于 2010-06-27T13:41:11.567 回答
1

这个问题有几个部分。首先是数据本身。这是通过查询来自 SQLite 数据库的吗?如果是这样,您有一个 Cursor 对象,其中包含整个结果。因此,如果您有一个产生 200 行的查询,那么您将在内存中拥有所有 200 行(这就是为什么缩小投影如此重要的原因)。

至于列表本身,这部分非常有效——Android 只会为您实际看到的元素创建视图。而且,根据您拥有的视图类型以及它们是否支持回收,Android 实际上会回收现有对象,以最大限度地减少初始化和内存管理的开销。

于 2010-06-28T03:20:52.257 回答
0

我不确定 Android 如何在内部处理它。但是我见过的大多数程序通过加载 20 个左右的项目然后让最后一个项目说“加载接下来的 20 个项目”来处理这个问题。然后,当您单击它时,它会加载接下来的 20 个项目。

于 2010-06-27T23:51:09.197 回答