在Android中更新现有联系人的性能如此之慢

时间:2018-06-11 07:08:14

标签: android contact

我在Android中更新现有联系人时遇到问题。我的代码执行大约400个联系人,但我需要大约20秒来更新它。这是我的代码。

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

然后我尝试按ID更新每个联系人过滤器并输入:

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);
    } 

我尝试了其他方法来更新联系人,但也需要相同的时间(400次联系约20秒)

 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();
        }

    }

我该怎么办,如何提高更新工作的性能。我认为它可以在3-5s更新400联系人

0 个答案:

没有答案