0

これらの両方が1 MBのヒープメモリを超えると、自分のアクティビティを漏らしています。私は1MB以上のconacts i、eを削除する必要があります。 2500件を超える連絡先getContentResolver()。クエリの問題

Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
Cursor cur = managedQuery(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 

代替策または回避策を教えてください。 それから私はどのように私は一度に100〜200人の連絡先を

if (cur.moveToFirst()) { 
     do { 
      String lookupKey = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); 
      Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey); 
      cr.delete(uri, null, null);    
     } while (cur.moveToNext());  
    } 
    cur.close(); 

削除することができますか?または他の方法ですか?

ログイン:

03-02 14:26:57.317: E/CursorWindow(5357): need to grow: mSize = 1048576, size = 216, freeSpace() = 135, numRows = 2616 
03-02 14:26:57.317: E/CursorWindow(5357): not growing since there are already 2616 row(s), max size 1048576 
03-02 14:26:57.317: E/CursorWindow(5357): The row failed, so back out the new row accounting from allocRowSlot 2615 
03-02 14:26:57.317: E/Cursor(5357): Failed allocating fieldDir at startPos 0 row 2615 

答えて

0

は別のスレッドでクエリを実行するために、Loaderを使用してください。これは、「開発者ガイド」の「ローダー」に記載されています。ちなみに、managedQuery()は非推奨です。

あなたはではありません。アクティビティで直接クエリを実行してください。あなたはすべてをかなり素早くぶら下げます。

連絡先を削除することについても尋ねますが、私はこれを行うコードはありません。

これを行うには、ContentProviderOperationオブジェクトと ContentResolver.applyBatch()で削除する必要があります。あなたが大急ぎでそれをやりたいのでない限り、 ContentProviderOperationオブジェクトのそれぞれに "yield allowed"をマークします。

ArrayList oparray = new ArrayList;

objBuilder = ContentProviderOperation.newDelete(ContactsContract.Contacts.CONTENT_URI); objBuilder.withYieldAllowed(true); obj = objBuilder.build();

oparray.add(obj);

getContentResolver()。applyBatch(ContactsContract.AUTHORITY、oparray);

これは連絡先データの量によっては遅くなります。

+0

ArrayList oparray = new ArrayList (); \t \t // ArrayList oparray = new ArrayList; \t \t ContentProviderOperation.Builder objBuilder = ContentProviderOperation.newDelete(ContactsContract.Contacts.CONTENT_URI); \t \t objBuilder.withYieldAllowed(true); \t \t //objBuilder.withExpectedCount(12); \t \t ContentProviderOperation obj = objBuilder.build(); \t \t oparray.add(obj); \t \t \t \t oparray.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) \t \t \t \t .build())。 – ToolFan

+0

Plus ContentProviderResult [] res = getContentResolver()。applyBatch(ContactsContract.AUTHORITY、oparray); ' – ToolFan

+0

これは連絡先を削除することではありません。 – ToolFan