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 /」提供程序中使用這樣的方法?
至於我可以看到MmsSmsProvider類(如果我的內存不會失敗我是你正在使用的內容提供者)沒有正確地實現bulkInsert或applyBatch - 即它沒有使用SQLite事務來加速多個數據庫操作(如果我沒有記錯,這至少是ICS的情況)。 – Jens
是的,resolver.bulkInsert()與循環中的doind resolver.insert()相同。這個方法是一個笑話。交易的事情使所有的差異,你從幾分鐘到幾秒鐘,但我無法找到一種方式來做它的內容:/ /短信提供商。 – Samet
並不是真的,如果提供者執行得不好,你幾乎可以做出決定。 – Jens