Производительность обновления существующих контактов в Android настолько низкая - PullRequest
0 голосов
/ 11 июня 2018

У меня проблема с обновлением существующего контакта в Android.Мой код выполняет около 400 контактов, но мне требуется около 20 секунд, чтобы обновить его.Вот мой код.

public class Contact {
    private long contactId;
    private String phoneNumber;
    private int phoneType;
}

Затем я пытаюсь обновить каждый фильтр контактов по идентификатору и типу:

ArrayList list = arrayLists [0];

for (int i = 0; i < list.size(); i++) {
     Contact contact = list.get(i);
     long contactID = contact.getContactId();
     String newPhoneNumber = contact.getPhoneNumber();
     int phoneType = contact.getPhoneType();
     updateContact(contactID, newPhoneNumber, phoneType);           
}

Вот моя функция updateContact:

private void updateContact(long contactID, String newPhoneNumber, int phoneType) {
        ContentResolver cr = getContentResolver();
        String where = ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND " + ContactsContract.CommonDataKinds.Phone.TYPE + " = ?";
        String[] whereParams = new String[]{contactID + "", phoneType + ""};
        ContentValues contentValues = new ContentValues();
        contentValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, newPhoneNumber);
        Uri dataUri = ContactsContract.Data.CONTENT_URI;
        cr.update(dataUri, contentValues, where, whereParams);
    } 

Я попробовал другой способ обновить контакт, но это также заняло то же время (около 20 секунд для 400 контактов)

 private void updateContact(long contactID, String newPhoneNumber, int phoneType) {
        ContentResolver cr = getContentResolver();
        String where = ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND " +
                ContactsContract.CommonDataKinds.Phone.TYPE + " = ?";
        String[] params = new String[]{contactID + "", phoneType + ""};
        ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

        ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
                .withSelection(where, params)
                .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, newPhoneNumber)
                .build());

        try {
            cr.applyBatch(ContactsContract.AUTHORITY, ops);
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (OperationApplicationException e) {
            e.printStackTrace();
        }

    }

Что мне делать, какМогу ли я улучшить производительность работы обновления?Я эксперт, он может обновить 400 контактов в течение 3-5 секунд

...