问题描述
本地数据库数据超过10000要求按首字母排序,且一次性加载到界面中,该如何处理,类似与系统的通讯录,一次性加载回来。
解决方案
1)排序
排序的实现有两种方式
- 对象排序
这种方式根据实现对应的Comparable的compareTo接口实现,然后根据Collection.sort方法进行排序,这种方式在数据量比较少的情况下是可以实现的,但如果数据量过大这种方式会非常慢。 -
数据库排序
根据数据库的order by 来实现排序,速度非常
2)UI 显示
这块非常重要,数据库查询其实非常快,10000条数据大概在400ms左右,远不会超过1s,但是查询到结果后怎么添加到界面上,因为数据量大,基数大,期间任何的转换都是性能的消耗。这里怎么做列表的设计?
当然列表显示控件还是ListView,但adpater不能使用BaseAdapter,必须使用CursorAdapter,好处在于我们查询数据的返回结果是一个cursor我们不需要做任何的转换直接填充到界面上了。
有些同学喜欢在查询到数据后轮训cursor将其转换成map类型的list或者对象list再填充到界面,这里的轮训就会花费特别多的时间。
总结
这里简单介绍了本地数据过多的情况下如何查询显示,当然数据量小的情况下可以不用做这种类似的处理。