Android Mms之:对话与联系人关联的总结详解
发布时间:2023-12-06 13:12:57
在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中的下拉菜单联动应用非常普遍,android中的下拉菜单用Spinner就能实现,以下列子通过简单的代码实现 * 菜单联动。一
- 网上的操作方式是我没有进行尝试,感兴趣的可以试试nohup java -Dserver.port=8848 -Dlogging.level.
- 计算器项目,要求实现加、减、乘、除、求倒数、求平方根等简单运算。真机调试结果如下图:布局文件:main_activity.xml<?x
- 面试题1:说说什么分布式事务?解释一下什么是CAP?现在互联网开发多使用微服务架构,一个简单的操作,在服务端可能就是由多个服务和数据库实例协
- 一,网络编程中两个主要的问题一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中I
- 本文实例讲述了C# Winform实现捕获窗体最小化、最大化、关闭按钮事件的方法,主要是通过重写WndProc来实现的。分享给大家供大家参考
- 本篇介绍了SpringBoot 缓存(EhCache 2.x 篇),分享给大家,具体如下:SpringBoot 缓存在 spring Boo
- Swing中的常用按钮在Swing中,常见的按钮组件有JButton,JCheckBox,JRadioButton等,它们都是抽象类Abst
- 本文实例分析了JAVA反射机制。分享给大家供大家参考,具体如下:反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感
- 前言本文例子实现了点击显示悬浮窗口,同时窗口可播放视频,拖动位置,点击关闭及返回 APP 页面,通过例子来讲述悬浮窗口实现原理及细节处理,效
- 前言在Java System#exit 无法退出程序的问题一文末尾提到优雅停机的一种实现方案,要借助Shutdown Hook进行实现,本文
- 通过拍照或相册中获取图片,并进行裁剪操作,然后把图片显示到ImageView上。 当然也可以上传到服务器(项目中绝大部分情况是上传
- 演示1 - 代理创建器public class A17 { public static void main(Str
- 一、@Value读取application.properties配置文件中的值application.properties配置文件fileN
- 本文借由并发环境下使用线程不安全的SimpleDateFormat优化案例,帮助大家理解ThreadLocal.最近整理公司项目,发现不少写
- Person实体类package com.ljq.domain;public class Person {  
- 这篇文章主要介绍了Java接口统一样式返回模板简介,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- DateTime类DateTime类是C#中最常用的时间类之一,它表示一个日期和时间。可以使用DateTime.Now属性获取当前时间,也可
- 最近因为fastjson安全漏洞,升级jar包时,踩了一些坑。新版本FastJsonHttpMessageConverter初始化,默认设置
- 查询数据会比较耗时,所以我们想把查询数据放在一个异步任务中,查询结果获得Cursor,然后在onPostExecute (Cursor re