Too many content provider operations between yield points解决方法
来源:互联网 发布:如何做淘宝客服兼职 编辑:程序博客网 时间:2024/06/06 14:22
问题引入:
毋庸置疑,电话本数据库中使用批量操作的方式会大大提高效率,使用方式为:
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_TYPE, null)
.withValue(RawContacts.ACCOUNT_NAME, null)
.withValue(RawContacts.SOURCE_ID, "1000"+i).build());
ops.add(xxx);
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
但是,如果批量操作的数据过多,比如多余500条的话,就会出现异常
Too many content provider operations between yield points. The maximum number of operations per yield point is 500
这是电话本数据库抛出来的一个异常,如果某个批量操作长久持有数据库连接,就会抛出这个错误。那么这个长久持有数据库连接的判断条件就是:批量操作的操作数多余500条。
代码:
ContactsProvider \src\com\android\providers\contacts\AbstractContactsProvider.java
如果操作多余500条而不加入yield points的话,就报错,强制停止这次批量操作。
问题分析:
上面说到官方指出批量操作需要加入yield points,那么代码中如何体现的呢?还是上面的applyBatch方法
看到operation.isYieldAllowed()没有,就是这里。如果操作支持yield points的话,就会进入这个if条件
在这个if里面会吧opCount=0;而这个opCount正是上面抛出异常的判断条件。
问题解决:
那既然知道了原因,那就好修改了。在构造批量操作的时候加入yield points。如下:
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_TYPE, null)
.withValue(RawContacts.ACCOUNT_NAME, null)
.withValue(RawContacts.SOURCE_ID, "1000"+i)
.withYieldAllowed(true).build());
参考网址:
http://blog.sina.com.cn/s/blog_6dc1188a010133ip.html
毋庸置疑,电话本数据库中使用批量操作的方式会大大提高效率,使用方式为:
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_TYPE, null)
.withValue(RawContacts.ACCOUNT_NAME, null)
.withValue(RawContacts.SOURCE_ID, "1000"+i).build());
ops.add(xxx);
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
但是,如果批量操作的数据过多,比如多余500条的话,就会出现异常
Too many content provider operations between yield points. The maximum number of operations per yield point is 500
这是电话本数据库抛出来的一个异常,如果某个批量操作长久持有数据库连接,就会抛出这个错误。那么这个长久持有数据库连接的判断条件就是:批量操作的操作数多余500条。
代码:
ContactsProvider \src\com\android\providers\contacts\AbstractContactsProvider.java
官方解释是:为了避免操作长久占用数据库,确保在批量操作中加入”yield points”
如果操作多余500条而不加入yield points的话,就报错,强制停止这次批量操作。
问题分析:
上面说到官方指出批量操作需要加入yield points,那么代码中如何体现的呢?还是上面的applyBatch方法
看到operation.isYieldAllowed()没有,就是这里。如果操作支持yield points的话,就会进入这个if条件
在这个if里面会吧opCount=0;而这个opCount正是上面抛出异常的判断条件。
问题解决:
那既然知道了原因,那就好修改了。在构造批量操作的时候加入yield points。如下:
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_TYPE, null)
.withValue(RawContacts.ACCOUNT_NAME, null)
.withValue(RawContacts.SOURCE_ID, "1000"+i)
.withYieldAllowed(true).build());
参考网址:
http://blog.sina.com.cn/s/blog_6dc1188a010133ip.html
0 0
- Too many content provider operations between yield points解决方法
- too many connections 解决方法
- Too many local variablese解决方法
- Too many open files解决方法
- Too many open files解决方法
- Difference between "Distribute Content" and "Update Distribution Points"(SCCM)
- linux Too many open files解决方法
- linux报too many open files解决方法
- Err: 1040: Too many connections 真正解决方法
- Discuz!出现错误Too many connections解决方法
- Content provider
- Content Provider
- content provider
- Content Provider
- Content Provider
- Content Provider
- Content Provider
- Content Provider
- 程序员装机必备的十款软件
- @Mock, @Spy, @Captor and @InjectMocks
- UVa 10926 - How Many Dependencies?
- 借助Xutils实现多线程下载
- CSS学习经验
- Too many content provider operations between yield points解决方法
- 可勾选的ExpandableListView
- 兔子-cvc-complex-type.2.3: Element 'web-app' cannot have character [children], because the type's cont
- android NFC 读写
- Android onInterceptTouchEvent setOnChangedListener onTouchEvent
- ASP.NET MVC 4專案4.5 Framework轉4.0
- 关于ZendStudio 10.5的破解 包括mac
- 怎么将编辑好的PDF文件转成PPT
- Mac如何自动发邮件给kindle推送文档