博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Mms专题之:对话与联系人的关联
阅读量:6289 次
发布时间:2019-06-22

本文共 900 字,大约阅读时间需要 3 分钟。

hot3.png

在Mms中每个Thread都有其相应的联系人,但是threads表中并没有直接保存联系人的信息(号码或名字),而是保存一个叫做recipient_id的东西,也还有一个类叫做data/RecipientIdCache.java专门管理它。

在数据库中专门有一个表来保存它canonical_addresses。它的目的就是为了能够快速的找到某一对话的联系人的信息。对话的表threads里面并没有保存其联系人的直接信息,而是有一列叫做recipient_ids的整数来代表收信人。而在数据库还有另外一个表叫做canonical_addresses,其用来匹配threads中的recipient_ids和号码,其只有二列,一个是_id,另一个就是它的号码。因为对话中并没有直接保存联系人的信息,所以当ConversationList想要显示一个Thread时,就要先查到它的RecipientId,然后再根据这个RecipientId到canonical_addresses中查找到号码,再用这个号码去联系人数据库查询到联系人的其他信息。这一整个过程比较烦琐,需要要查询三次数据库才能得到联系人的信息,就无法快速的显示出来。所以就有了RecipientIdCache这个类,这个类内部有一个Hash表,键是Thread的RecipientId,值是联系人的号码。其他的类,比如Conversation在查询Thread的时候不会直接去查询canonical_addresses表来得到对应RecipientId的联系人的号码,而是直接通过RecipientIdCache来获取。RecipientIdCache先从自己的Cache中来查到号码,如果查找 不到再去查询数据库,并加到Cache中。每次发送信息时都会进行一次更新Cache的动作。因为RecipientId是Thread中的一个属性,所以当Thread表发生变化时,比如删除一个Thread时也都会进行更新RecipientIdCache。

转载于:https://my.oschina.net/bintojojo/blog/336355

你可能感兴趣的文章
linux下scp命令详解
查看>>
我的友情链接
查看>>
Memcached概念
查看>>
Spring整合RabbitMQ
查看>>
构建多模块maven工程
查看>>
用micropython玩newbit(一)
查看>>
sqlite3设置外键问题
查看>>
Linux sysadmin(2): 网络、RPM包管理及一些脚本
查看>>
awk的使用
查看>>
自动化运维工具Puppet(一)
查看>>
我的友情链接
查看>>
[Java]批量存储信息
查看>>
jquery time picker
查看>>
http需重定向到https时apache的rewrite模块配置和安装
查看>>
git fetch或pull前检查remote有哪些变化
查看>>
单片机C语言-程序结构
查看>>
MySQL不一样的GROUP BY
查看>>
Mysql,Case When,Case多个字段
查看>>
56、LVS NAT模型实战
查看>>
互联网、因特网、万维网、局域网、广域网的区别
查看>>