ContentProviderOperation 中的 withYieldAllowed函数说明

作者: rain 分类: 移动 发布时间: 2013-08-26 10:35 6 条评论

在前面ContentProviderOperation 中介绍了其作用,在ContentproviderOperation.Builder 类中有个没有文档说明的函数 withYieldAllowed().

Wolfram Rittmeyer在 ContactsContract的内部Data类的介绍中发现了其使用说明(在Batch operations 一节中):

批量操作一大堆数据可能会长期锁定数据库,从而阻止其他应用访问该数据库并且有可能会引起ANR(应用无响应)对话框出现。

为了避免长期锁定数据库,只要在批量操作中添加“yield points”即可。一个yield points告诉Content Provider,在执行下一个操作之前可以先提交当前的数据,然后通知其他应用,如果有其他应用请求数据的话,就先让其他应用操作,等其他应用操作完成后,再继续打开一个事务来执行下一个操作。如果没有其他程序请求数据,则一个yield points不会自动提交事务,而是继续执行下一个批量操作。通常情况下一个同步Adapter应该在开始操作一行原数据之前添加一个yield points。 详情参考  withYieldAllowed(boolean).

通过上面的解释,应该就能知道withYieldAllowed函数的功能和使用场景了吧。

如果您的数据也需要被其他应用使用的话,考虑在用ContentProviderOperation执行批量操作的时候添加yield points吧。

本文出自 云在千峰,转载时请注明出处及相应链接。

本文永久链接: http://blog.chengyunfeng.com/?p=520

Ɣ回顶部