連絡先のリストを読み込もうとすると、パフォーマンスの問題が発生します。これはコードです:
public ContactList getContacts(String constraint)
{
ContactList contactList = new ContactList();
Uri uri = ContactsContract.Contacts.CONTENT_URI;
if (constraint != null && constraint.equals("") == false)
{
uri = Uri.withAppendedPath(
ContactsContract.Contacts.CONTENT_FILTER_URI, constraint);
}
ContentResolver cr = _context.getContentResolver();
String sortOrder = DISPLAY_NAME + " COLLATE LOCALIZED ASC";
// Cursor cur = cr.query(uri, null, null, null, sortOrder);
String[] arrayOfString = new String[1];
arrayOfString[0] = "1";
Cursor cur = cr.query(uri, null, "has_phone_number=?", arrayOfString,
sortOrder);
if (cur.getCount() > 0)
{
setBaseContactList(contactList, cur);
}
cur.close();
return contactList;
}
private void setBaseContactList(ContactList contactList, Cursor cur)
{
String id;
String name;
String lookUpKey;
String photoId;
while (cur.moveToNext())
{
id = cur.getString(cur.getColumnIndex(DISPLAY_ID));
name = cur.getString(cur.getColumnIndex(DISPLAY_NAME));
photoId = cur.getString(cur.getColumnIndex(PHOTO_ID));
lookUpKey = cur.getString(cur.getColumnIndex(LOOKUP_KEY));
Contact c = new Contact(id, name, photoId, lookUpKey);
contactList.addContact(c);
}
}
traceviewを見ると、cur.getString(cur.getColumnIndex( "Some column name"));がわかります。読み込み時間に負担がかかります
traceviewを使用しているときに私が見ることができるもう一つのことは、メソッドへの呼び出しがたくさんあるということです
String.equalsIgnoreCase()
私の推測では、cur.getStringがそれを呼び出しています。
onCreate()で開始されたすべての値をHT(ContactID、Contact)に入れ、抽出されたユーザーIDを使用してcontactsdbから選択するたびにそれらを呼び出すことを考えています。使用量を3回削減します。これは非常に良いことですが、より良い解決策はありますか?
ありがとう