我正在寻找一种方法来挂起给定ContentProvider的Uri上的通知。
Activity通过CursorLoader绑定到CursorAdapter。Service可以在ContentProvider上执行大量的批处理、单行更新。CursorLoader将在每一个行更新中重新加载其内容,就像ContentProvider通过ContentResolver#notifyChange通知侦听器一样。由于我无法编辑ContentProvider,并且无法控制批处理查询的执行,是否有一种方法可以挂起(正在执行的Service中的) Uri上的通知,直到执行了所有ContentProvider-managed查询?我需要这样做,以避免CursorLoader的连续请求所引起的闪烁。
发布于 2013-04-08 19:04:26
您不能在服务中禁用此机制。但是,您应该尝试使用ContentProviderOperations对它们进行批处理。
我编写了一个关于ContentProviderOperations的入门文章和另外两篇文章,分别介绍了withYieldAllowed()和withBackReference()方法。
特别是后一个应该对您在这里描述的内容感兴趣。
和ContentProviderOperations,您可以对多个更新和插入进行批处理。如果然后在您的对象上调用applyBatch() ,则ContentProvider将同时执行它们。
现在我从未使用过Nicolas的生成器,但由于他是一位非常精通Android的开发人员,并且在谷歌工作,我打赌生成的代码使用事务,最后只为整个批处理调用一次notifyChange()。
这正是你需要的。
发布于 2013-04-09 07:45:16
你能代替你自己的ContentResolver吗?
然后,您可以尝试用您自己的类扩展ContentResolver,并且可以重写方法notifyChange并在那里实现您的逻辑。
发布于 2013-04-09 11:54:05
在内容提供者类中,在返回游标之前在query()方法中,只需注释代码,如下所示
cursor.setNotificationUri(getContext().getContentResolver(), uri);https://stackoverflow.com/questions/15872621
复制相似问题