我正試圖從手機中加載聯繫人列表的應用程序,但這需要大量的時間根據聯繫人的數量。我想在後臺運行加載聯繫人列表,以便它不會減慢應用程序的速度。 我正在使用以下函數來加載聯繫人信息。如何在android的後臺運行一段代碼?
void loadContacts() {
ContentResolver contentResolver=getContentResolver();
Cursor cursor=contentResolver.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null);
if(cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Bitmap photo = retrieveContactPhoto(id);
int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));
String phoneNumber = null;
if (hasPhoneNumber > 0) {
Cursor cursor2 = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null);
while (cursor2.moveToNext()) {
String ph = cursor2.getString(cursor2.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
phoneNumber = ph.replaceAll("\\s", "");
System.out.println(phoneNumber);
}
cursor2.close();
}
if(phoneNumber==null)
continue;
}
}
cursor.close();
}
可以使用asyncktask使代碼在後臺運行 –
'AsyncTask'將讓你在後臺線程 –
使用'CursorLoader'運行的東西;這比使用'AsyncTask'更強大。請參閱[本教程](https://developer.android.com/training/contacts-provider/retrieve-names.html),它正是您想要的。 –