8

我正在寻找一种方法来暂停给定ContentProvider's上的通知Uri。用例是:

  1. An通过 aActivity绑定到a 。CursorAdapterCursorLoader
  2. AService可能会在ContentProvider.
  3. CursorLoader在每行更新时重新加载其内容,因为通过ContentProvider通知侦听器ContentResolver#notifyChange

由于我无法编辑ContentProvider,并且我无法控制批处理查询的执行,有没有办法暂停Uri(在执行中Service)上的通知,直到所有ContentProvider-managed 查询都已执行?我需要这个是为了避免连续重新查询CursorLoader.

4

3 回答 3

3

您不能在您的服务中禁用此机制。但是您应该尝试使用ContentProviderOperations对它们进行批处理。

我写了一篇关于 ContentProviderOperations 的介绍性文章和另外两篇分别介绍方法withYieldAllowed()和的文章withBackReference()

对于您在此处描述的内容,尤其是后者应该很有趣。

使用 ContentProviderOperations,您可以批量更新和插入。如果您随后调用applyBatch()您的 ContentResolver 对象,则 ContentProvider 会立即执行它们。

现在我从来没有使用过 Nicolas Klein 的生成器,但由于他是一位非常非常熟练的 Android 开发人员并且在 Google 工作,我敢打赌生成的代码使用了事务并且最后只为完整的批处理调用notifyChange()一次。

正是你需要的。

于 2013-04-08T19:04:26.303 回答
0

你能用你自己的 ContentResolver 代替吗?

您可以尝试使用您自己的类扩展 ContentResolver,然后您可以覆盖方法 notifyChange 并在那里实现您的逻辑。

于 2013-04-09T07:45:16.003 回答
0

在您的内容提供程序类中,query()在返回光标之前的内部方法中,只需注释看起来像这样的代码

cursor.setNotificationUri(getContext().getContentResolver(), uri);
于 2013-04-09T11:54:05.673 回答