关于ContentProvider的批量操作
2024-09-24 10:56:56
今天看公司代码,发现在批量插入通话记录和联系人的时候,用了一个
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
这是一个批量插入的列表。
ops.add(ContentProviderOperation
.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE,
null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME,
null).withYieldAllowed(true).build());
ops.add(ContentProviderOperation
.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(
ContactsContract.Data.RAW_CONTACT_ID,
rawContactInsertIndex)
.withValue(
ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(
ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
name).withYieldAllowed(true).build());
然后调用内容提供者来执行批量操作。
resolver.applyBatch(ContactsContract.AUTHORITY, ops);
ops.clear();
这样做相比一次次的迭代循环操作,有一些性能上的优势。
因为,这样是一个事物,保证数据完整性,而且减少了上下文的切换。具体的用法见代码。常量的话,替换成自己需要的就可以了。不过这主要针对有Content Provider的才能做,如果是是对数据库的操作,那就直接对数据库操作可能更直接些。
最新文章
- PostgreSQL 锁监控
- 转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)
- Python第二模块(文件和函数)
- 技术专题-PHP代码审计
- 边界网关协议BGP
- 【BZOJ-4386】Wycieczki DP + 矩阵乘法
- IOS - NSURLSession
- UIKit-3347.44.2/UICollectionView.m:3443
- csdn第九名
- java指针
- “-bash: svn: command not found”
- Android Checkbox Example
- 06 - 从Algorithm 算法派生类中删除ExecuteInformation() 和ExecuteData() VTK 6.0 迁移
- 常用财务软件:用友,金蝶,新中大,速达,管家婆,金算盘,远方,远光,金钥匙,润衡,浪潮,上海博科,易商,任我行,千方百剂,智管,小蜜蜂,SAP,ORACLE,SSA,QAD,MAPICS,JDE。
- Html网页的代码
- 数字规律:Pascal‘s triangle
- Hdu2680 最短路
- 【题解】Luogu P2221 [HAOI2012]高速公路
- git 的安装与初始化
- 从零开始学spring cloud(十) -------- hystrix简单代码示例