使用 ContentProviderOperation 來提升效能

來源:互聯網
上載者:User

標籤:android   blog   http   io   os   使用   ar   java   資料   

ContentProviders  是android 系統核心組件之一,ContentProviders 封裝了資料的提供者,其底層資料一般都是儲存在資料庫中或者儲存在雲端。

有時候你需要更新多行資料,可以選擇調用多次ContentResolver的對應函數,或者 使用大量操作。當然 後者效能會比較好些。

為了使批次更新、插入、刪除資料更加方便,android系統引入了 ContentProviderOperation類。

在官方開發文檔中推薦使用ContentProviderOperations,有一下原因:

  1. 所有的操作都在一個事務中執行,這樣可以保證資料完整性
  2. 由於大量操作在一個事務中執行,只需要開啟和關閉一個事務,比多次開啟關閉多個事務效能要好些
  3. 使用大量操作和多次單個操作相比,減少了應用和content provider之間的環境切換,這樣也會提升應用的效能,並且減少佔用CPU的時間,當然也會減少電量的消耗。


要建立ContentProviderOperation對象,則需要使用 ContentProviderOperation.Builder類,通過調用下面幾個靜態函數來擷取一個Builder 對象:

擷取Builder 對象的函數
函數 用途
newInsert 建立一個用於執行插入操作的Builder
newUpdate 建立一個用於執行更新操作的Builder
newDelete 建立一個用於執行刪除操作的Builder

這個Buidler對象使用了著名的Builder設計模式。

由於Builder對象的函數都返回了自己,所以通過一系列的函數調用即可產生最終的ContentProviderOperation對象。

12345678 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對象核心函數的介紹:

Builder主要函數介紹
函數 用途
withSelection (String selection, String[] selectionArgs) 指定需要操作的資料條件。只有在更新、刪除操作中有用。
withValue (String key, Object value) 定義一列的資料值。只在更新、插入資料中有用。
withValues (ContentValues values) 定義多列的資料值。 只在更新、插入資料中有用。

另外注意上面範例程式碼中是使用ArrayList來儲存 ContentProviderOperation操作的。後面在介紹withValueBackReference()函數作用的時候就知道為啥用 有序的ArrayList而不是其他List。

最後通過ContentResolver 的applyBatch()函數來應用大量操作:

12345678 try {   getContentResolver().      applyBatch(ContactsContract.AUTHORITY, ops);} catch (RemoteException e) {   // do s.th.} catch (OperationApplicationException e) {   // do s.th.}

大量操作很簡單,提示效能很容易!

如果您還沒有使用ContentProviderOperation,趕緊修改吧

 

http://www.cnblogs.com/tt_mc/p/3966707.html

http://blog.csdn.net/woshinia/article/details/9024265

使用 ContentProviderOperation 來提升效能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.