我正在寻找一种方法来暂停给定 ContentProvider
的 Uri
的通知。用例是:
Activity
通过CursorLoader
绑定(bind)到CursorAdapter
。Service
可能会在ContentProvider
上进行大量批量单行更新。CursorLoader
将在每次行更新时重新加载其内容,因为ContentProvider
通过ContentResolver#notifyChange
通知监听器.
由于我无法编辑 ContentProvider
,而且我无法控制批处理查询的执行,有没有办法暂停 Uri
上的通知(在执行 Service
),直到所有 ContentProvider
管理的查询都已执行?我需要这个以避免因 CursorLoader
的连续重新查询而引起的闪烁。
最佳答案
您不能在您的服务中禁用此机制。但是您应该尝试使用 ContentProviderOperations 对它们进行批处理.
我写了一个introductory post about ContentProviderOperations和另外两个涵盖方法的帖子 withYieldAllowed()
和 withBackReference()
分别。
对于您在此处描述的内容,尤其是后者应该引起您的兴趣。
使用 ContentProviderOperations,您可以批处理多个更新和插入。如果您随后调用 applyBatch()
在您的 ContentResolver 对象上,ContentProvider 会同时执行它们。
现在我从未使用过 Nicolas Klein 的生成器,但由于他是一位非常非常精通 Android 的开发人员并且在 Google 工作,我敢打赌生成的代码使用事务和调用 notifyChange()
最后对整个批处理仅执行一次。
正是您所需要的。
关于android - 禁用 ContentProvider URI 上的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15872621/