博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用 ContentProviderOperation 来提升性能
阅读量:7042 次
发布时间:2019-06-28

本文共 1662 字,大约阅读时间需要 5 分钟。

ContentProviders  是android 系统核心组件之一,ContentProviders 封装了数据的访问接口,其底层数据一般都是保存在数据库中或者保存在云端。

有时候你需要更新多行数据,可以选择调用多次ContentResolver的对应函数,或者 使用批量操作。当然 后者性能会比较好些。

为了使批量更新、插入、删除数据更加方便,android系统引入了 类。

在官方开发文档中推荐使用ContentProviderOperations,有一下原因:

  1. 所有的操作都在一个事务中执行,这样可以保证数据完整性
  2. 由于批量操作在一个事务中执行,只需要打开和关闭一个事务,比多次打开关闭多个事务性能要好些
  3. 使用批量操作和多次单个操作相比,减少了应用和content provider之间的上下文切换,这样也会提升应用的性能,并且减少占用CPU的时间,当然也会减少电量的消耗。

要创建ContentProviderOperation对象,则需要使用 类,通过调用下面几个静态函数来获取一个Builder 对象:

获取Builder 对象的函数
函数 用途
newInsert 创建一个用于执行插入操作的Builder
newUpdate 创建一个用于执行更新操作的Builder
newDelete 创建一个用于执行删除操作的Builder

这个Buidler对象使用了著名的Builder设计模式。

由于Builder对象的函数都返回了自己,所以通过一系列的函数调用即可生成最终的ContentProviderOperation对象。

ArrayList
ops = new ArrayList
();ops.add( ContentProviderOperation.newInsert(RawContacts.CONTENT_URI) .withValue(RawContacts.ACCOUNT_TYPE, "someAccountType") .withValue(RawContacts.ACCOUNT_NAME, "someAccountName") .withYieldAllowed(true) .build());

当然 你还可以使用熟悉的对象,对应的函数为withValues(values)。

下表是Builder对象核心函数的介绍:

Builder主要函数介绍
函数 用途
withSelection (String selection, String[] selectionArgs) 指定需要操作的数据条件。只有在更新、删除操作中有用。
withValue (String key, Object value) 定义一列的数据值。只在更新、插入数据中有用。
withValues (ContentValues values) 定义多列的数据值。 只在更新、插入数据中有用。

另外注意上面示例代码中是使用ArrayList来保存 ContentProviderOperation操作的。后面在介绍withValueBackReference()函数作用的时候就知道为啥用 有序的ArrayList而不是其他List。

最后通过 的applyBatch()函数来应用批量操作:

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

批量操作很简单,提示性能很容易!

如果您还没有使用ContentProviderOperation,赶紧修改吧!

Read more: 

转载地址:http://hpxal.baihongyu.com/

你可能感兴趣的文章
Entity Framework在WCF中序列化的问题
查看>>
OpenCL快速入门
查看>>
选择生成日报表,月报表,年报表
查看>>
使用位操作
查看>>
Babelfish(二分)
查看>>
JS 中如何判断 undefined 和 null
查看>>
ftk学习记录(一个进度条文章)
查看>>
log4j直接输出日志到flume
查看>>
非正确使用浮点数据由项目产生BUG讨论的问题
查看>>
PHP5中的stdClass
查看>>
IntelliJ IDEA Community Edition 14.1.4下使用 Apache-Subversion搭建代码管理环境
查看>>
四种可变交流swap方法
查看>>
Lucene中的 Query对象
查看>>
二分基础
查看>>
物流英语
查看>>
[iOS]iOS8可用的识别用户方式(idfa、UUID、idfv)
查看>>
hdu1507--二分图最大匹配
查看>>
【数据结构与算法】二叉树深度遍历(递归)
查看>>
iOS开发--基于AFNetWorking3.0的图片缓存分析
查看>>
使用jqMobi开发app基础:弹出内容的设计
查看>>