
我发现这个代码段我异步运行,但是速度非常慢.
ContentResolver cr = getContentResolver();Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null,null);if (cur.getCount() > 0) { while (cur.movetoNext()) { String ID = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.disPLAY_name)); Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",new String[]{ID},null); while (emailCur.movetoNext()) { String email = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); autoCompleteAdapter.add(name + " - " + email); } emailCur.close(); } }} 我正在执行一种内部查询,我认为这是问题.有没有办法调整它,使它更快?
解决方法private static final String[] PROJECTION = new String[] { ContactsContract.CommonDataKinds.Email.CONTACT_ID,ContactsContract.Contacts.disPLAY_name,ContactsContract.CommonDataKinds.Email.DATA};...ContentResolver cr = getContentResolver();Cursor cursor = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,PROJECTION,null);if (cursor != null) { try { final int contactIdindex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.CONTACT_ID); final int displaynameIndex = cursor.getColumnIndex(ContactsContract.Contacts.disPLAY_name); final int emailindex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA); long contactID; String displayname,address; while (cursor.movetoNext()) { contactID = cursor.getLong(contactIdindex); displayname = cursor.getString(displaynameIndex); address = cursor.getString(emailindex); ... } } finally { cursor.close(); }} 少数笔记:
>仅使用ContactsContract.CommonDataKinds.Email.CONTENT_URI获取所需的信息,请参阅ContactsContract.CommonDataKinds.Email了解可以查询哪些列>使用投影只能获得真正需要的列,节省一些内存并增加查询性能>仅在while循环之前获取列索引一次
总结以上是内存溢出为你收集整理的android – 从联系人列表获取名称和电子邮件是非常慢的全部内容,希望文章能够帮你解决android – 从联系人列表获取名称和电子邮件是非常慢的所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)