android - 重 ContentProvider 查询和 ListView

标签 android android-listview android-contentprovider

对于一个可能是菜鸟的问题,我们深表歉意,但尽管在 SO 上研究了大量教程和其他问题,但仍找不到答案。

我想做的很简单:显示一个包含大量数据库存储字符串的 Android ListView。我所说的“很多”是指最多 100MB,但 ListView 应该会立即开始显示内容。

上下文是:这是笔记管理应用程序,默认情况下它应该显示所有未过滤的用户笔记。我正在研究如果有很多笔记,应用程序将如何表现。

现在我将推荐的方法与 Loader 框架一起使用:在 onCreateLoader 中启动 ContentProvider 查询,然后在 onLoadFinished 中将生成的 Cursor 分配给 ListView 的适配器。

这仍然是非常缓慢的(初始加载最多 10 秒)。我研究了 Cursor 的来源,知道它保留了一个数据“窗口”,因此不应一次加载所有 100MB 的文本。不过好像是这样。

我认为这是一项相当常见的任务,很惊讶没有找到任何关于它的有用信息。这是应用程序的关键部分,我想从一开始就把它做好 - 以后很难重构它。

所以有人可以帮忙吗?延迟加载是答案吗?为什么 Cursor 不自己做?如何正确执行 - 我是否必须先缓存 ID 数组并在滚动时加载 block ?

谢谢!

最佳答案

SimpleCursorAdapter + CursorLoader 应该可以正常工作,似乎您的数据库查询很慢,很可能您想对未索引字段上的数据进行排序

关于android - 重 ContentProvider 查询和 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31744606/

相关文章:

Android:使用 android.provider.Telephony.Sms.Conversations

android - 在android中创建帧动画

java.lang.RuntimeException : Unable to instantiate activity ComponentInfo - NFC access 错误

android - 在自定义 ListView 中保留透明度

android - CursorLoader 不显示数据库条目

android - 如果数据库没有信息,检查数据库的内容提供者是否应该调用 REST 内容提供者

android触摸画线

android - 在 Android 中动态更改 MenuItem?

android - ListView 在调用 notifyDataSetChanged() 时没有得到更新

android - ListView 中的 ToggleButton,值在滚动时自动更改