Obtenir le nom et l'email de la liste de contacts est très lent

Je me suis mise en œuvre d'un AutoCompleteTextView et j'ai besoin du Nom et de l'adresse E-Mail de tous mes contacts.
J'ai trouvé cet extrait que je l'exécute de façon asynchrone, mais c'est très lent.

ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, 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, null, 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();
        }
    }
}

Je suis d'effectuer une sorte de requête interne et je pense que c'est le problème. Est-il un moyen de les régler et de le rendre plus rapide?

Avez-vous réussi à le faire fonctionner ?
L'extérieur if (cur.getCount() > 0) est redondante et peut être supprimé.

OriginalL'auteur Marco Matarazzi | 2012-08-24