3 回答
TA贡献1777条经验 获得超10个赞
您的查询效率低下,您目前正在为每个联系人执行一个非常慢的查询,您可以通过一个大查询(非常快)获得所有信息:
String[] projection = new String[] { Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER };
Cursor c = cr.query(Phone.CONTENT_URI, projection, null, null, null);
while (c.moveToNext()) {
long contactId = c.getLong(0);
String name = c.getString(1);
String phone = c.getString(2);
Log.i("Phones", "got contact phone: " + contactId + " - " + name + " - " + phone);
}
c.close();
TA贡献1828条经验 获得超6个赞
您可以考虑使用该Paging
库:https ://developer.android.com/topic/libraries/architecture/paging/
它的设计理念是列表仅显示一定数量的项目,因此实际上无需加载超出其可能显示的方式。例如,一个 ListView 可能只显示 10 个联系人,因此无需获取 600 个联系人。
相反,当用户滚动时,分页库将获取更少量的数据,从而消除 600 个联系人的加载时间、600 个联系人的内存等等......从而提高效率。
TA贡献1824条经验 获得超5个赞
如果您担心速度,我会尝试使用 Set,尽管 ArrayList 中有 600 多个联系人应该不成问题。当数据集达到数百万甚至更多时,它就会成为一个问题。我会尝试查看您的代码中的任何其他低效之处。
就 Set 而言,最常见的两种 Java 数据结构是 HashSet 和 TreeSet。TreeSet 如果你想对集合进行排序。HashSet 稍微快一点,但是你失去了排序。两者都有 O(1) 访问时间。
添加回答
举报