当我有 ListActivity 和 Adapter 时,Android 如何处理包含 200 个元素的列表。它是否尝试直接加载所有这些元素,它是如何等到用户滚动然后呈现这些元素的?
当列表太长时,我是否需要担心性能?
当我有 ListActivity 和 Adapter 时,Android 如何处理包含 200 个元素的列表。它是否尝试直接加载所有这些元素,它是如何等到用户滚动然后呈现这些元素的?
当列表太长时,我是否需要担心性能?
取决于适配器是如何实现的。
如果您有一个没有子类化的适配器(您使用一个由 SDK 提供的适配器),Android 将尝试直接加载所有这些适配器。
我建议继承 SimpleCursorAdapter并实现您的自定义适配器。这样,您将拥有例如 10 个视图(与您的屏幕需要的一样多),并且该视图将被重用于 190 条记录的其余部分。
这个问题有几个部分。首先是数据本身。这是通过查询来自 SQLite 数据库的吗?如果是这样,您有一个 Cursor 对象,其中包含整个结果。因此,如果您有一个产生 200 行的查询,那么您将在内存中拥有所有 200 行(这就是为什么缩小投影如此重要的原因)。
至于列表本身,这部分非常有效——Android 只会为您实际看到的元素创建视图。而且,根据您拥有的视图类型以及它们是否支持回收,Android 实际上会回收现有对象,以最大限度地减少初始化和内存管理的开销。
我不确定 Android 如何在内部处理它。但是我见过的大多数程序通过加载 20 个左右的项目然后让最后一个项目说“加载接下来的 20 个项目”来处理这个问题。然后,当您单击它时,它会加载接下来的 20 个项目。