Android:内容观察者的“onChange()”方法被多次调用
我正在使用 content://sms
的内容观察器。我正在将所有消息写入 SD 卡中的文本文件。但是内容观察器中的 onChange()
方法被多次调用,并且同一消息被多次写入文本文件。如何避免这种情况?我还想知道内容观察器是否会减慢手机速度。
I am using a content observer for content://sms
. I am writing all the messages to a text file in SD card. But the onChange()
method in the content observer is called multiple times and the same message is written multiple times to the text file. How to avoid this? Also I want to know if having the content observer will slow down the phone.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您需要重写 DeliverSelfNotifications() 以返回 true。
You need to override deliverSelfNotifications() to return true.
Vivek,请确保每次离开活动时都取消注册内容观察器,例如在
onDestroy()
方法中调用unregisterContentObserver()
。希望这有帮助! (就我而言,它有效)Vivek, please ensure that you unregister your content observer any time you leave the activity e.g. in
onDestroy()
method, callunregisterContentObserver()
. Hope this help ! (in my case it worked)尝试这样做以避免多次执行 onChange()
Try this to avoid multiple execution of onChange()
onChange() 事件针对每个更改的列(即“正文”或“地址”)调用一次 - 因此需要多次调用。仅处理一次数据的最简单方法是存储“_id”列的值,查看它在下一次迭代中是否已更改,然后忽略。
请参阅此处的示例:
Sms ContentObserver onChange() 多次触发
The onChange() event is called once for each column that changes (i.e. "body" or "address") - thus the multiple calls. The easiest way to only process the data once is to store the value of the "_id" column, see if it has changed on the next iteration and then ignore.
See example here:
Sms ContentObserver onChange() fires multiple times