首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >禁用ContentProvider URI上的通知

禁用ContentProvider URI上的通知
EN

Stack Overflow用户
提问于 2013-04-08 06:27:33
回答 3查看 1.7K关注 0票数 8

我正在寻找一种方法来挂起给定ContentProviderUri上的通知。

  1. Activity通过CursorLoader绑定到CursorAdapter
  2. Service可以在ContentProvider上执行大量的批处理、单行更新。
  3. CursorLoader将在每一个行更新中重新加载其内容,就像ContentProvider通过ContentResolver#notifyChange通知侦听器一样。

由于我无法编辑ContentProvider,并且无法控制批处理查询的执行,是否有一种方法可以挂起(正在执行的Service中的) Uri上的通知,直到执行了所有ContentProvider-managed查询?我需要这样做,以避免CursorLoader的连续请求所引起的闪烁。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-08 19:04:26

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

我编写了一个关于ContentProviderOperations的入门文章和另外两篇文章,分别介绍了withYieldAllowed()withBackReference()方法。

特别是后一个应该对您在这里描述的内容感兴趣。

和ContentProviderOperations,您可以对多个更新和插入进行批处理。如果然后在您的对象上调用applyBatch() ,则ContentProvider将同时执行它们。

现在我从未使用过Nicolas的生成器,但由于他是一位非常精通Android的开发人员,并且在谷歌工作,我打赌生成的代码使用事务,最后只为整个批处理调用一次notifyChange()

这正是你需要的。

票数 3
EN

Stack Overflow用户

发布于 2013-04-09 07:45:16

你能代替你自己的ContentResolver吗?

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

票数 0
EN

Stack Overflow用户

发布于 2013-04-09 11:54:05

在内容提供者类中,在返回游标之前在query()方法中,只需注释代码,如下所示

代码语言:javascript
运行
复制
cursor.setNotificationUri(getContext().getContentResolver(), uri);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15872621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档