Android Mms之:联系人管理的应用分析

所属分类: 软件编程 / Android 阅读数: 1030
收藏 0 赞 0 分享

Contact联系人对Mms来说是十分重要的,因为每一个对话的收信人都是一个联系人,新建信息时可以输入联系人的任何信息,比如号码或名字,Mms都可以把信息发给相应的人。Mms中的类Contact就是用来代表一个联系人,它含有联系人的信息,如名字,号码,联系人Id,是否存在于联系人数据库等等,同时Contact也提供了一些方法来获取Contact对象,Contact.get()方法来获取Contact对象。Contact会保持数据与联系人数据库的同步,有一个接口updateContact()用于通知联系人信息已经发生了改变。

Contact内部也有一个Cache,用于保存最近用到的联系人。因为外部在用Contact.get()方法来获取Contact时通常都只传给一个号码,并期望获取Contact。

Contact内部的Cache是由ContactCache类来创建和管理的。它内部还有一个TaskStack用于管理一些Runnable。因为每个从数据库中加载Contact都是一个单独的线程,这个TaskStack就是专门用于管理Runnable和,以Stack的方式来管理,也即FILO顺序的方式来运行Runnable任务。

ContactCache中有很多重载的get()方法用于获取Contact对象,其中都有一个布尔参数canBlock,这个是说是以阻塞调用者的方式来加载Contact还是以异步的方式来加载,另外一个参数就是联系人的号码。get()方法会先调用internalGet()方法,internalGet()会先试图从内部的CachemContactHash中获取Contact,如果不存在就用传入的号码新建一个Contact,总之它一定会返回一个联系人的。之后会进行updateContact()的动作,updateContact()就是放在一个Runnable线程中,如果调用者是可阻塞的,马上就运行这个Runnable来updateContact,如果是异步方式就把这个Runnable放到TaskStack中稍后运行。UpdateContact会调用getContactInfo来获取联系人的信息,getContactInfo会调用getContactInfoForSelf(),getContactInfoForPhoneNumber,getContactInfoForEmailAddress()来获取具体的联系人信息。其中如果这个号码是手机联系人自己本身,就获取本机的相关信息;如果号码是一个Email地址或者一个短号码,或者字符号码,那么就把号码作为一个Email地址来查询,也就是说把它作为联系人的Email字段匹配来查询;其他情况,也就是号码就是一个电话号码,把它与联系人的电话号码字段匹配查询。updateContact在查询完成后,会调用接口UpdateListener.onUpdate(),以告诉监听者,联系人已更新。因为联系人的获取过程中都是异步的,所以才会在更新完成后调用接口来通知。

内部的Cache的数据结构是一个HashMap<String,ArrayList<Contact>>,Key是以Contact内部的数据来生成的。InvalidateCache时并不会移除mContactsHash内部的数据,而是把其标识为Stale,当下次Get这个Contact时就会调用updateContact()来更新这个Contact。

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多