当前位置:  编程技术>移动开发

Android Mms之:深入理解对话列表管理

    来源: 互联网  发布时间:2014-10-16

    本文导语:  Conversation这个类主要表示对话的数据结构,其内持有一个Thread所有的相关信息,如Recipients,ThreadId等等,也用于管理Thread,比如查询Thread,删除Thread,更新Thread,管理ThreadId,管理Thread的联系人等等。因为Thread表与其他表关联...

Conversation这个类主要表示对话的数据结构,其内持有一个Thread所有的相关信息,如Recipients,ThreadId等等,也用于管理Thread,比如查询Thread,删除Thread,更新Thread,管理ThreadId,管理Thread的联系人等等。因为Thread表与其他表关联的信息比较多,如联系人,消息个数,这些信息有些直接会写在数据库。因为Thread上面的信息比较多,所以加载时会较费时,因此就有了一个在Conversation内部的Cache来提高加载Thread的速度。

获得Conversation对象的方式都是通过Conversation的静态方法Conversation.get(),这个方法先从内部的Cache来取Conversation对象,如果Cache中没有就构建对象,并从数据库中加载信息放到对象中。

因为一个Conversation代表着一个Thread,所以Conversation的内部Cache的实现数据结构是一个HashSet,里面每一个元素都是一个Conversation对象。它提供了几个操作Cache的方法:get, put, remove, replace等。每个Conversation对象只能添加一次,否则会有Exception抛出。但是这个Cache的实现方式很不高效,直接用一个HashSet,所以在get和replace时,很不方便。更好的实现方式应该是一个Hash表,键是ThreadId,值就是Conversation对象,这样就可以利用Hash的高效率的优势来进行查询和替换等操作。这个Cache的实现方式很简单,Converation.init()方法会调用cacheAllThreads()进行Cache的工作。当Mms启动的时候,以及Thread发生变化时,如删除Thread时也都会调用Conversation.init()来进行Cache的更新。Convresation.init()会启动一个新的线程并在线程中调用cacheAllThreads()来构建Conversation的Cache,而获取Conversation的方法如Conversation.get()都会先试图从它的Cache中来拿Conversation对象,如果Cache中没有,就新建一个Conversation,并加入到Cache中。cacheAllThreads()会从数据库中查询出所有的Thread,构建新的Conversation对象,把数据库的信息全总加到Conversation对象中去,然后 放入到Cache中。


    
 
 

您可能感兴趣的文章:

  • 深入android Unable to resolve target 'android-XX'详解
  • 深入Android开发FAQ的详解
  • Android 自动化测试经验分享 深入UiScrollable
  • 基于android中读取assets目录下a.txt文件并进行解析的深入分析
  • Android中asset文件夹与raw文件夹的区别深入解析
  • Android开发之文件操作模式深入理解
  • android生命周期深入分析(一)
  • Android 关机弹出选择菜单的深入解析
  • 深入Android SQLite 事务处理详解
  • ubuntu 12.10 上 android 编译环境搭建的深入解析
  • 深入Android Browser配置管理的详解
  • 深入Android MediaPlayer的使用方法详解
  • Android中使用PULL方式解析XML文件深入介绍
  • 深入android中The connection to adb is down的问题以及解决方法
  • Android笔记之:深入为从右向左语言定义复杂字串的详解
  • Android开发笔记之:深入理解Cursor相关的性能问题
  • 深入Understanding Android ContentProvider详解
  • Android笔记之:深入ViewStub的应用
  • 深入分析Android ViewStub的应用详解
  • android的编译和运行过程深入分析
  • android开发教程之时间对话框核心代码
  • Android修改源码解决Alertdialog触摸对话框边缘消失的问题
  • Android加载对话框同时异步执行实现方法
  • Android中 动态改变对话框值的方法
  • android 对话框弹出位置和透明度的设置具体实现方法
  • Android Mms之:对话与联系人关联的总结详解
  • Android中创建一个透明的进度对话框实例
  • Android中自定义对话框(Dialog)的实例代码
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 理解Android的手势识别提高APP的用户体验
  • Android开发笔记之:深入理解多线程AsyncTask
  • Android Mms之:深入理解Compose
  • 深入理解Android组件间通信机制对面向对象特性的影响详解
  • android ListView深入理解
  • Android组件间通信--深入理解Intent与IntentFilter
  • 深入理解Android Matrix理论与使用的详解
  • 申请Android Map 的API Key(v2)的最新申请方式(SHA1密钥)
  • Android瀑布流实例 android_waterfall
  • Android开发需要的几点注意事项总结
  • Android系统自带样式 (android:theme)
  • android 4.0 托管进程介绍及优先级和回收机制
  • Android网络共享软件 Android Wifi Tether
  • Android访问与手机通讯相关类的介绍
  • Android 图标库 Android GraphView
  • Android及andriod无线网络Wifi开发的几点注意事项
  • 轻量级Android开发工具 Android Tools
  • Android 2.3 下StrictMode介绍
  • Android 开发环境 Android Studio
  • IDEA的Android开发插件 idea-android
  • Android手机事件提醒 Android Notifier
  • XBMC的Android客户端 android-xbmcremote
  • Android小游戏 Android Shapes
  • Android电池监控 Android Battery Dog
  • android开发:“android:WindowTitle”没有对应项no resource
  • Android 上类似IOS 的开关控件。 Android ToggleButton
  • Android 将 android view 的位置设为右下角的解决方法
  • Android 2D游戏引擎 Android Angle


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3