2012-11-03 13 views
2

我想在「content:// sms /」表中插入多個短消息。比方說500個短信。Android在content://msm/中插入多條短消息contentresolver.bulkInsert():太慢

我的代碼是:

ContentValues [500] valuesarray = new ContentValues[]; 

for(int i=0;i<values.size();i++){ 
    valuesarray[i] = values.get(i); 
} 

getContentResolver().bulkInsert(Uri.parse("content://sms/"), valuesarray); 

它的工作原理,但它是極爲緩慢的,它與insert()方法沒有區別。我在網上進行了搜索,並找到如下方法:

try { 
    database.beginTransaction(); 

    for (ContentValues initialValues : allValues) { 
     values = initialValues == null ? new ContentValues() : new ContentValues(initialValues); 
     rowId = insertEvent(database, values); 
     if (rowId > 0) 
      rowsAdded++; 
    } 

    database.setTransactionSuccessful(); 
} catch (SQLException ex) { 

} finally { 
    database.endTransaction(); 
} 

但是這是針對個人數據庫的。我如何在Android的「content:// sms /」提供程序中使用這樣的方法?

+1

至於我可以看到MmsSmsProvider類(如果我的內存不會失敗我是你正在使用的內容提供者)沒有正確地實現bulkInsert或applyBatch - 即它沒有使用SQLite事務來加速多個數據庫操作(如果我沒有記錯,這至少是ICS的情況)。 – Jens

+0

是的,resolver.bulkInsert()與循環中的doind resolver.insert()相同。這個方法是一個笑話。交易的事情使所有的差異,你從幾分鐘到幾秒鐘,但我無法找到一種方式來做它的內容:/ /短信提供商。 – Samet

+0

並不是真的,如果提供者執行得不好,你幾乎可以做出決定。 – Jens

回答

4

如何在Android的「content:// sms /」提供程序中使用類似這樣的方法?

你不能,對不起。

(此外,該提供商是不是在Android SDK的一部分,可能不會在所有設備上存在,無論如何,所以你不應該使用它來)