【发布时间】:2018-07-19 07:33:44
【问题描述】:
我编写了从电话簿中获取联系人的代码,但我认为他的工作速度很慢。 例如,在三星 Galaxy s8 中,189 个电话号码(每个联系人可能有多个号码)的平均速度为 4582 毫秒。 5秒!我的想法很慢。
我把负责计算时间和解析检查正确性的部分代码剪掉了,对速度影响不大:
class ContactLoader(private val context: Context) {
fun getContactList(): List<ContactEntity> {
val result = mutableListOf<ContactEntity>()
val contentResolver = context.contentResolver
val cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, null)
if (cursor != null && cursor.count > 0) {
while (cursor.moveToNext()) {
val id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID))
val name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))
if (cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)) > 0) {
val secondCursor = contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
arrayOf(id),
null
)
while (secondCursor.moveToNext()) {
val phone = secondCursor.getString(secondCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
val contactEntity = ContactEntity(
userId = id,
userName = name,
phone = phone,
phoneHash = hashUtils.fromNumberToHash(phone.replace("""\D""".toRegex(), ""))
)
result.add(contactEntity)
}
secondCursor.close()
}
}
}
cursor?.close()
return result
}
}
如何加快手机联系方式?
【问题讨论】:
标签: android android-contentresolver