0

这两个都在泄漏我的活动,当它超过1mb的堆内存时。我需要删除超过1mb的数据,我,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); 

什么是替代或变通? 后来我做

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

我怎么只能一次删除100-200联系人?或者其他方式?

登录:

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

使用加载器来运行一个单独的线程查询。这在装载机下的开发者指南中有记录。顺便说一句,managedQuery()已被弃用。

你应该从未上的活动直接运行的查询。你会很快把所有东西都挂起来。

你也问删除联系人,虽然我看不到,这是否任何代码。

为此,您应该使用ContentProviderOperation对象和 ContentResolver.applyBatch()将其删除。除非您希望很快完成此操作,否则将ContentProviderOperation对象的每个 标记为“允许产出”。

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 =新的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 2012-03-05 18:28:21

+0

Plus ContentProviderResult [] res = getContentResolver()。applyBatch(ContactsContract.AUTHORITY,oparray);' – ToolFan 2012-03-05 18:36:57

+0

这不会删除任何联系人。 – ToolFan 2012-03-05 18:37:20