项目中使用到ContentObserver来观察Provider的变化,当对Uri做数据库操作时对应的Provider会发一条Notify消息调用UI上层的ContentChange方法,在这个ContentChange方法中是重新对本会话的消息表的Uri查询一次,查询完毕后更新界面并将listView滑到最底部,有发现如果删除某会话的最后一条数据再新增一条数据时界面没有刷新的异常。排查后发现每一条短消息对应一个ThreadId,一旦删除了某个会话中的最后一条消息,在新建一条信息会重新创建一个新的ThreadId.而我们项目监听的Uri后面有ThreadId这个作为参数来查所有包含在本会话中的消息记录,因为监听的是老的ThreadId,所以新消息的Notify没有收到。处理办法,当去查询消息数据时先用当前的联络人号码查一遍Thread表,因为一个发送人号码肯定是对应唯一的一个ThreadId,所以查出来的一定是一个新的ThreadId,这样在用新的ThreadId组成Uri再去查就会查到新加的数据,查询完更新UI,问题解决。
项目经验谈---IM新消息界面刷新异常处理记录,布布扣,bubuko.com
时间: 2024-12-23 10:29:11