在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。
Android Mms之:对话与联系人关联的总结详解
2021-01-18 10:50Android开发网 Android
本篇文章是对Android中对话与联系人的关联进行了详细的分析介绍,需要的朋友参考下
延伸 · 阅读
- 2022-03-11Android String类型转换为float、double和int的工具类方
- 2022-03-11Android 8.1 Launcher3实现动态指针时钟功能
- 2022-03-11Android控件Spinner实现下拉列表及监听功能
- 2022-03-11详解Android获取所有依赖库的几种方式
- 2022-03-11Android 仿高德地图可拉伸的BottomSheet的示例代码
- 2022-03-11Android 优化之卡顿优化的实现
- Android
Android 后台发送邮件示例 (收集应用异常信息+Demo代码)
今天介绍个更简单的方法,我们把异常信息收集后,通过后台发送邮件方法,把相关异常信息发送到我们指定的邮箱里面...
- Android
Android编程之在SD卡上进行文件读写操作实例详解
这篇文章主要介绍了Android编程之在SD卡上进行文件读写操作的方法,结合实例形式较为详细的分析了Android的文件操作及针对SD卡的存取操作相关技巧,需要的...
- Android
Android 捕获错误日志的方法
这篇文章主要介绍了Android 捕获错误日志的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...
- Android
Android基于API的Tabs3实现仿优酷tabhost效果实例
这篇文章主要介绍了Android基于API的Tabs3实现仿优酷tabhost效果,结合完整实例形式分析了Android实现优酷界面效果的相关技巧,需要的朋友可以参考下...
- Android
Android应用开发中实现apk皮肤文件换肤的思路分析
这篇文章主要介绍了Android应用开发中实现apk皮肤文件换肤的思路分析,包括布局和主要的皮肤更换逻辑实现,需要的朋友可以参考下...
- Android
Android中查看USB连接的外接设备信息的代码实例
这篇文章主要介绍了Android中查看USB连接的外接设备信息的代码实例,需要的朋友可以参考下...
- Android
Android的Service应用程序组件基本编写方法
Service是一个android 系统中的应用程序组件,它跟Activity的级别差不多,但是他没有图形化界面,不能自己运行,只能后台运行,Service通常用来处理一些耗时比...
- Android
android fm单体声和立体声的切换示例代码
android fm单体声和立体声的切换示例代码,切换是需要在一定的条件下满足才会进行切换,切换的条件和电台的信号强度RSSI、信号稳定性CQI等等都有关系...