Android中SimpleCursorAdapter的性能问题

时间:2011-06-08 15:56:16

标签: android performance listview adapter simplecursoradapter

我正在尝试显示一个填充了SimpleCursorAdapter的ListView。 SimpleCursorAdapter接收一个Cursor,其中包含执行rawQuery,如:

SELECT DISTINCT s.cod AS _id, s.name AS name FROM supplier s
   INNER JOIN product p ON p.supplier = s.cod
   INNER JOIN productprice pp ON pp.product = p.cod
WHERE
   pp.category = 'w'
ORDER BY s.name

当我直接在基础中执行此查询时,它会在不到0.1秒(正常)的情况下返回40行。在存储库中执行rawQuery也非常快。问题是当我执行myListView.setAdapter(simpleCursorAdapter);时。这需要2分钟以上!所以我已将查询更改为SELECT cod AS _id, name FROM supplier ORDER BY namesetAdapter的执行速度非常快(“正常快速”hshs)。

我的问题: 存在一个JOIN限制,我可以在rawQuery中填充listView吗?难道我做错了什么?我应该在存储库中使用query()而不是rawQuery()?

对英语表示抱歉,并提前致谢。

1 个答案:

答案 0 :(得分:3)

您提供给SimpleCursorAdapter的Cursor是数据库查询的结果集。如果数据库查询速度很快,则问题位于CursorAdapter中。我遇到过CursorAdapters性能不佳(使用SimpleCursorAdapter和扩展CursorAdapter或ResourceAdapter的自定义适配器)。我最终从Cursor中提取数据,放入一个数组,并扩展了ArrayAdapter,这给了我更好的性能。