通过Contacts API将30 000个联系人同步到我的应用

时间:2014-11-23 20:25:02

标签: android performance android-contacts contactscontract

我制作了一个应用程序来同步来自android联系人存储库的联系人,如下所示 当你完成注册过程它要求你同步你的联系人像Facebook一样,然后它将你的所有联系人电话号码发送到服务器,如果你的联系人使用相同的应用程序,服务器返回,如果不是它要求你邀请他们。

一切正常,直到我的一个有30 000个联系人的客户让我在这里要求解决方案, 由于30 000个联系人同步过程没有完成,他甚至无法访问他的存储库,因为我的应用程序和Android系统以并发方式运行。 感谢您提前帮助

以下代码是我使用的代码: 它返回一个包含所有联系人的列表,然后我在for循环中运行以获取所有联系人照片以显示它们,然后将列表发送到服务器以检查他们是否使用该应用程序。

public class Phoner {
public static void loadPhoneContacts(Context context,
        final OnPhoneContactsLoadedListener listener) {
final List<Bundle> phoneContacts = new ArrayList<Bundle>();
final String[] PROJECTION = new String[] { ContactsContract.Data._ID,
                ContactsContract.Data.DISPLAY_NAME,
                ContactsContract.Data.PHOTO_URI,
                ContactsContract.Data.LOOKUP_KEY,
                ContactsContract.Contacts.HAS_PHONE_NUMBER,
                ContactsContract.CommonDataKinds.Phone.NUMBER,
                ContactsContract.CommonDataKinds.Im.DATA };

        final String SELECTION = "(" + ContactsContract.Data.MIMETYPE + "=\""
                + ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE
                + "\");

        CursorLoader mCursorLoader = new CursorLoader(context,
                ContactsContract.Data.CONTENT_URI, PROJECTION, SELECTION, null,
                null);
        mCursorLoader.registerListener(0, new OnLoadCompleteListener<Cursor>() {

            @Override
            public void onLoadComplete(Loader<Cursor> arg0, Cursor cursor) {
                if (cursor == null) {
                    return;
                }
                while (cursor.moveToNext()) {
                    Bundle contact = new Bundle();
                    contact.putInt("phoneid", cursor.getInt(cursor
                            .getColumnIndex(ContactsContract.Data._ID)));
                    contact.putString(
                            "displayname",
                            cursor.getString(cursor
                                    .getColumnIndex(ContactsContract.Data.DISPLAY_NAME)));
                    contact.putString("photouri", cursor.getString(cursor
                            .getColumnIndex(ContactsContract.Data.PHOTO_URI)));
                    contact.putString("lookup", cursor.getString(cursor
                            .getColumnIndex(ContactsContract.Data.LOOKUP_KEY)));
                    phoneContacts.add(contact);

for循环如下: 此代码位于服务

private void loadPhoneContacts() {
    Phoner.loadPhoneContacts(getApplicationContext(),
            new OnPhoneContactsLoadedListener() {
                @Override
                public void onPhoneContactsLoaded(List<Bundle> phoneContacts) {
                    for (Bundle phoneContact : phoneContacts) {
                        for (Account account : accounts) {
                            phoneContact
                                    .getString("photouri");
                            phoneContact
                                    .getString("displayname");
                        }
                    }
                }
            });
}

P.s:我听说过同步适配器,但我不知道它是否可以利用那么多的联系人。 感谢

0 个答案:

没有答案