Android加载通话记录流程分析
Android加载通话记录流程分析
CSDN博客 原文 http://blog.csdn.net/fx1ts/article/details/22986221 主题 Android 数据库通话记录的加载过程和大部分的应用类似,也是异步查询数据库,得到查询结果后再刷新 ListView 。但是在加载通话记录时还有一些特别的处理。特别是在绑定Listview 时涉及到了一些复杂的操作。
显示通话记录由 CallLogFragment.java 文件进行处理。在加载通话记录的过程中还用到了 CallLogQueryHandler 查询通话记录数据库, CallLogAdapter 填充 ListView 。
查询通话记录的过程大致如下:
其中 CallLogQueryHandler 继承自 CursorQueryHandler ,该类是执行异步数据库查询的常用类。以上过程非常的常见,大部分程序都和该流程类似。
关键是在 CallLogAdapter 的 bindView 函数中执行了很多难以理解的操作。通过查看通话记录的显示内容知道,在通话记录中显示了拨打电话的号码,通话记录的类型,该号码所对应的联系人(如果号码已加入联系人)等。当挂断电话时会查询联系人数据库查找所拨打的电话对应的联系人姓名,并把这些信息写入通话记录数据库中。因此在通话记录的数据库中有一列用于存储联系人姓名。但是通话记录中的联系人名称和联系人数据库中的名称有时候是不一致的,通话记录中的联系人名称只是一个缓存。考虑这样一种情况:当和张三打完电话后,立刻把联系人中的张三改为张三三,然后查看通话记录会发现通话记录也会变成张三三,而通话记录数据库中仍然是张三。
为了使通话记录中的显示名称和联系人中的一致,在显示通话记录时,需要查询每个电话号码对应的联系人信息。为了提高效率,在 CallLogAdapter 中用CallLogAdapterExpirableCache
如果联系人中的信息和通话记录数据库中的信息不一致(其实这种情况比较少见),则发送消息给 CallLogAdapter 重新执行显示操作。具体的流程如下:
该时序图只是展现了主要的框架,忽略了很多细节。
其中 QueryThead 负责查询联系人信息,得到联系人信息缓存到ExpirableCache
更多相关文章
- android中google“定位查询”编辑
- android开发 软键盘出现后 防止EditText控件遮挡 整体平移UI
- android之电话号码查询
- Android(安卓)SDK下, 如何在程序中输出日志 以及如何查看日志
- Android获取系统储存以及内存信息的方法(一)
- Android第三方授权(新浪微博篇)
- 笔记-系统源码常用的Content Provider
- 解决android logcat不打印信息
- 【Android(安卓)Developers Training】 97. 序言:访问通讯录数据