带有大型数据库的android游标加载器

带有大型数据库的android游标加载器,android,android-cursorloader,android-anr-dialog,large-data,Android,Android Cursorloader,Android Anr Dialog,Large Data,我正在开发一个联系人应用程序,我需要支持大量联系人。假设用户有10万个联系人 要求是 1) 带快速滚动的分段列表视图 2) 使用firstname或lastname、email或phonenumber作为用户类型搜索联系人 我在这里写了一个内容提供者,我有一个5列的表 _id firstname lastname email phonenumber 我使用loadermanger回调和来自支持库的游标加载器来查询内容提供者 但我面对的问题是表中有50000行 1) ANR-使用此日志可能是因为

我正在开发一个联系人应用程序,我需要支持大量联系人。假设用户有10万个联系人

要求是 1) 带快速滚动的分段列表视图 2) 使用firstname或lastname、email或phonenumber作为用户类型搜索联系人

我在这里写了一个内容提供者,我有一个5列的表

_id firstname lastname email phonenumber
我使用loadermanger回调和来自支持库的游标加载器来查询内容提供者

但我面对的问题是表中有50000行

1) ANR-使用此日志可能是因为游标不断分配和取消分配堆内存

05-30 18:59:20.775: E/CursorWindow(13798): need to grow: mSize = 1048576, size = 54,     freeSpace() = 32, numRows = 8509
05-30 18:59:20.775: E/CursorWindow(13798): not growing since there are already 8509 row(s), max size 1048576
05-30 18:59:20.775: E/CursorWindow(13798): The row failed, so back out the new row accounting from allocRowSlot 8508
05-30 18:59:20.775: E/Cursor(13798): Failed allocating fieldDir at startPos 10537 row 8508
2) 从适配器中删除部分代码似乎会降低ANR频率,但FASTSCROLL仍会导致ANR

3) 搜索:非常慢,我可以使用“FTS3”加快搜索速度,但这不是我的要求。我只需要在查询中使用“LIKE”或“CONTAINS”


这是否不可能达到这一要求?谷歌的人是怎么做到的

你知道是DB还是活页夹IPC慢吗?我想这就是我的出发点。如果是IPC,则必须检查绑定内存和线程冲突,并仔细阅读AbstractWindowedCursor。如果是SQLite,有很多很好的查询优化指南。DB查询速度慢。由于im使用游标适配器,它需要返回游标中的所有50000行。这几乎需要7秒。然后我需要遍历“firstname”列中的第一个字母来创建部分。这让它变得更慢了。嗯。。。如果您确信只是查询速度慢,那么就必须使用SQLite技巧来改进(您已经让我对测试产生了兴趣:我相信我已经看到了更好的性能)。例如,为什么需要5万行?你当然不能一次在屏幕上全部显示出来。。。或者一次将它们全部发送到网络。你能做一些分页吗?我只想我的应用程序就像默认的联系人应用程序一样。寻呼不是一个选项bcz如果用户想看到最后一个联系人,那么需要很长时间才能到达那里。我需要快速滚动部分,所以分页不是一个好主意。有没有其他方法可以做到这一点-谢谢