ContentProviders 是android 系統核心組件之一,ContentProviders 封裝了數據的訪問接口,其底層數據通常都是保存在數據庫中或者保存在雲端。html
有時候你須要更新多行數據,能夠選擇調用屢次ContentResolver的對應函數,或者 使用批量操做。固然 後者性能會比較好些。
java
爲了使批量更新、插入、刪除數據更加方便,android系統引入了
ContentProviderOperation
類。android
在官方開發文檔中推薦使用ContentProviderOperations,有一下緣由:
數據庫
要建立ContentProviderOperation對象,則須要使用
設計模式ContentProviderOperation.Builder類,經過調用下面幾個靜態函數來獲取一個Builder 對象:
函數 | 用途 |
---|---|
newInsert | 建立一個用於執行插入操做的Builder |
newUpdate | 建立一個用於執行更新操做的Builder |
newDelete | 建立一個用於執行刪除操做的Builder |
這個Buidler對象使用了著名的Builder設計模式。app
因爲Builder對象的函數都返回了本身,因此經過一系列的函數調用便可生成最終的ContentProviderOperation對象。ide
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); ops.add( ContentProviderOperation.newInsert(RawContacts.CONTENT_URI) .withValue(RawContacts.ACCOUNT_TYPE, "someAccountType") .withValue(RawContacts.ACCOUNT_NAME, "someAccountName") .withYieldAllowed(true) .build());
固然 你還可使用熟悉的ContentValues對象,對應的函數爲withValues(values)。函數
下表是Builder對象核心函數的介紹:性能
函數 | 用途 |
---|---|
withSelection (String selection, String[] selectionArgs) | 指定須要操做的數據條件。只有在更新、刪除操做中有用。 |
withValue (String key, Object value) | 定義一列的數據值。只在更新、插入數據中有用。 |
withValues (ContentValues values) | 定義多列的數據值。 只在更新、插入數據中有用。 |
另外注意上面示例代碼中是使用ArrayList來保存
ContentProviderOperation操做的。後面在介紹withValueBackReference()函數做用的時候就知道爲啥用
有序的ArrayList而不是其餘List。ui
最後經過ContentResolver 的applyBatch()函數來應用批量操做:
try { getContentResolver(). applyBatch(ContactsContract.AUTHORITY, ops); } catch (RemoteException e) { // do s.th. } catch (OperationApplicationException e) { // do s.th. }
批量操做很簡單,提示性能很容易!
若是您尚未使用ContentProviderOperation,趕忙修改吧!
Read more: http://blog.chengyunfeng.com/?p=517#ixzz3CzcGjshp