2012-09-17 67 views
0

我有一個數據庫和內容提供商的應用程序。爲了從ListView的數據庫中顯示一些數據,我使用LoaderManager。 這很簡單,在絕大多數情況下工作得很好。Android與LoaderManager卡住

但是,當來自內容提供者的許多更改通知到達時,UI將完全超載。在光標所觀察到的uri上有很多插入,每秒約15次時發生。我認爲,即使遊標加載在後臺,大量的調用也足以使UI過載。

所以我想,在某些情況下,如上所述,限制負載的數量(以及如此調用onLoadFinished()),例如每秒一次。

  • 有沒有辦法用LoaderManager來實現呢?我試圖玩startLoading()stopLoading但沒有成功,反正它不被推薦。

  • 或者我可能需要自己管理Loader,但如果這種情況不常見,我會感到驚訝。

感謝您的建議。

編輯

我居然錯過了一個方法... setUpdateThrottle(long delayMS)做正是我想要的。

回答

2

您可以在內容提供商覆蓋applyBatch(...),做這樣的事情:

@Override 
public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations) 
     throws OperationApplicationException { 
    final SQLiteDatabase db = mOpenHelper.getWritableDatabase(); 
    db.beginTransaction(); 
    try { 
     final int numOperations = operations.size(); 
     final ContentProviderResult[] results = new ContentProviderResult[numOperations]; 
     for (int i = 0; i < numOperations; i++) { 
      results[i] = operations.get(i).apply(this, results, i); 
     } 
     db.setTransactionSuccessful(); 
     return results; 
    } finally { 
     db.endTransaction(); 
    } 
} 

您可以使用此批量插入你到一個事務,以便通知只發生一次。

+0

感謝您的回覆,即使它沒有真正回答我的問題,多虧了您,我發現了'bulkInsert()'方法,可以提高性能。 – FabiF

+0

+1這應該會更快 –