源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Android Mms之:对话与联系人关联的总结详解

  • 时间:2021-07-19 20:04 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Android Mms之:对话与联系人关联的总结详解
在Mms中每个[b]Thread[/b]都有其相应的联系人,但是[b]threads[/b]表中并没有直接保存联系人的信息(号码或名字),而是保存一个叫做[b]recipient_id[/b]的东西,也还有一个类叫做[b]data/RecipientIdCache.java[/b]专门管理它。 在数据库中专门有一个表来保存它[b]canonical_addresses[/b]。它的目的就是为了能够快速的找到某一对话的联系人的信息。对话的表[b]threads[/b]里面并没有保存其联系人的直接信息,而是有一列叫做[b]recipient_ids[/b]的整数来代表收信人。而在数据库还有另外一个表叫做[b]canonical_addresses[/b],其用来匹配[b]threads[/b]中的[b]recipient_ids[/b]和号码,其只有二列,一个是_id,另一个就是它的号码。因为对话中并没有直接保存联系人的信息,所以当[b]ConversationList[/b]想要显示一个[b]Thread[/b]时,就要先查到它的[b]RecipientId[/b],然后再根据这个RecipientId到[b]canonical_addresses[/b]中查找到号码,再用这个号码去联系人数据库查询到联系人的其他信息。这一整个过程比较烦琐,需要要查询三次数据库才能得到联系人的信息,就无法快速的显示出来。所以就有了[b]RecipientIdCache[/b]这个类,这个类内部有一个Hash表,键是[b]Thread[/b]的[b]RecipientId[/b],值是联系人的号码。其他的类,比如[b]Conversation[/b]在查询[b]Thread[/b]的时候不会直接去查询[b]canonical_addresses[/b]表来得到对应[b]RecipientId[/b]的联系人的号码,而是直接通过[b]RecipientIdCache[/b]来获取。[b]RecipientIdCache[/b]先从自己的[b]Cache[/b]中来查到号码,如果查找 不到再去查询数据库,并加到[b]Cache[/b]中。每次发送信息时都会进行一次更新Cache的动作。因为[b]RecipientId[/b]是[b]Thread[/b]中的一个属性,所以当[b]Thread[/b]表发生变化时,比如删除一个[b]Thread[/b]时也都会进行更新[b]RecipientIdCache[/b]。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部