TeamTalk Android代码分析(业务流程篇)

1.1 总体结构

1.总体结构有点类似MVC的感觉,模块结构从上向下大体是:

UI层:Activity和Fragment构成,期间包括常用的一些开源控件如:imageloader,speedx,gifview等,和下层数据变更通知通过总线事件完成(EventBus)

管理层:Service(即:imservice,下文均采用此称呼)和一些按照业务划分的Manager(loginmanager,contactmanager,sessionmanager,socketmanager 等),该层负责业务的流转和数据接口的提供,

数据和缓存层:才greendao实现,包括一系列业务相关的缓存,缓存的对象在各manager实体中处理。

网络层:具体由netty实现,获取或发送数据通过pb协议实现(protobuf)

2.1 登录过程

1>请求登录服务器(http),分配消息服务器及其他相关配置

2>链接请求消息服务器

3>其中如果网络连接失败,采用本地登录过程,即:在登录状态的情况下,没有网络也可以查看本地历史信息。

4>登录消息服务器成功后,发送总线事件通知imservice

5>imservice初始化各manager,开启本地和网络数据请求,本地缓存及其他配置的数据填充。

3.1 ContactManager的初始化操作

3.1.1 本地数据的业务操作

1>数据库load部门列表,并填充部门map(departmentmap)

2>数据库load用户列表,并填充用户map(usermap)

3>发送总线事件,通知相关界面(聊天/通讯录/my),并设置该manager数据状态就绪

相关页面动作如下:

1>聊天页面动作:只有session,user,group 数据全部就绪,这个页面才会更新,稍后再详细分析

2>通讯录页面动作:

(1)设置用户tab数据,更新ui

(2)设置部门tab数据,更新ui

(3)用户和部门数据就绪,搜索状态可操作

3>通过loginmanager获取登录信息,更新ui(这个位置的触发,可以放置在登录成功后及时事件通知)

3.1.2 网络数据的业务操作

1>按照本地存储的最后时间点作为参数,请求部门列表

2>按照本地存储的最后时间点作为参数,请求用户列表

3>获取部门数据:

1)缓存map

2)存储db

3)发送总线事件(userinfoevent事件,user_info_update),通知页面更新ui

涉及页面有:通讯录页面:用户列表ui/部门列表ui/用户详细信息(userinfofragment),如果页面收到通知,则获取缓存数据,更新ui

4>获取用户数据:

1)缓存usermap

2)存储db

3)发送总线事件更新ui,页面响应同部门数据。

注意事项:通知页面更新的总线事件,考虑采用poststicky 形式。

3.2 GroupManager的初始化操作

TeamTalk Android代码分析(业务流程篇)的更多相关文章

  1. TeamTalk Android代码分析(业务流程篇)---消息发送和接收的整体逻辑说明

    第一次纪录东西,也没有特别的顺序,想到哪里就随手画了一下,后续会继续整理- 6.2消息页面动作流程 6.2.1 消息页面初始化的总体思路 1.页面数据的填充更新直接由页面主线程从本地数据库请求 2.数 ...

  2. Android代码分析工具lint学习

    1 lint简介 1.1 概述 lint是随Android SDK自带的一个静态代码分析工具.它用来对Android工程的源文件进行检查,找出在正确性.安全.性能.可使用性.可访问性及国际化等方面可能 ...

  3. ansible代码分析第一篇--主文件—ansible分析

    2016年2月23日,学习,分析ansible代码 ansible是一种运维中使用的批量部署的工具,它本身是一种框架,具体的部署和架构分析,下面这篇文章讲的不错. http://os.51cto.co ...

  4. 私有析构函数 Android 代码分析

    有人说声明 Private Destructor, 这对象只能在 stack 上创建,不能在Heap上创建, 其实错了, 这样的程序编译都过不了. 那为何会有 Private Destructor, ...

  5. android 代码分析

    1.@Override注解 @Override 注解是用来指定方法重写的,只能修饰方法并且只能用于方法重写,不能修饰其它的元素. 作用是告诉编译器检查这个方法,保证父类要包含一个被该方法重写的方法,否 ...

  6. Android事件传递机制详解及最新源码分析——View篇

    摘要: 版权声明:本文出自汪磊的博客,转载请务必注明出处. 对于安卓事件传递机制相信绝大部分开发者都听说过或者了解过,也是面试中最常问的问题之一.但是真正能从源码角度理解具体事件传递流程的相信并不多, ...

  7. Android事件传递机制详解及最新源码分析——ViewGroup篇

    版权声明:本文出自汪磊的博客,转载请务必注明出处. 在上一篇<Android事件传递机制详解及最新源码分析--View篇>中,详细讲解了View事件的传递机制,没掌握或者掌握不扎实的小伙伴 ...

  8. Android核心分析之十六Android电话系统-概述篇

    Android电话系统之概述篇 首先抛开Android的一切概念来研究一下电话系统的最基本的描述.我们的手机首先用来打电话的,随后是需要一个电话本,随后是PIM,随后是网络应用,随后是云计算,随后是想 ...

  9. Android艺术——Bitmap高效加载和缓存代码分析(2)

    Bitmap的加载与缓存代码分析: 图片的压缩 比如有一张1024*768像素的图像要被载入内存,然而最终你要用到的图片大小其实只有128*96,那么我们会浪费很大一部分内存,这显然是没有必要的,下面 ...

随机推荐

  1. php错误抑制符

    php错误抑制符 简介 PHP 支持一个错误控制运算符:@.当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉. @这个符号在Java里面是注解符号. 实例 <?ph ...

  2. Powershell 渗透测试工具-Nishang

    Powershell 渗透测试工具-Nishang 分享到: 作者:V1ct0r 稿费:500RMB(不服你也来投稿啊!) 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 传送门 ...

  3. axis2调用webservice教训

    总结教训,axis2client调用WS接口时url不能加?wsdl,而用cxf调用时则要加上. 今天用axis2的RpcServerClient调用https的webservice接口,在设置完op ...

  4. C# 添加应用程序包

    项目中可能会遇到某些扩展方法不可以应用的情况,这时候需要在项目中引用程序包 步骤如下: 回车即可

  5. WPF全球化与本地化

    当一个App需要推出多语言版本时,就需要使用到[全球化与本地化]服务. 原理及过程 资源文件中包含了所有的控件信息,通过导出这些控件信息,修改其对应的相关属性(比如TextBlock的Text属性)的 ...

  6. 判断输入的值是否为Double

    using System; using System.Collections.Generic; using System.Text; namespace TDRFactory { public cla ...

  7. 三.Windows I/O模型之事件选择(WSAEventSelect )模型

    1.事件选择模型:和异步选择模型类似的是,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知.对于异步选择模型采用的网络事件来说,它们均可原封不动地移植到事件选择模型.事件选择模型和 ...

  8. 搭建 Lepus 天兔 监控MySQL

    Part1: Lepus安装需要Lamp环境,lepus官网手册也建议采用XAMPP的方式安装,lepus也是在XAMPP上进行研发的 注意xampp会把apache,mysql,php都安装,所以要 ...

  9. (转)基于MVC4+EasyUI的Web开发框架形成之旅--MVC控制器的设计

    http://www.cnblogs.com/wuhuacong/p/3284628.html 自从上篇<基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍>总体性的概括,得到 ...

  10. 通过nvm 切换 npm 版本

    通过 nvm-windows 更新 npm 1.先安装 nvm-windows .成功后可在命令窗口 输入nvm 查看到 nvm的版本号. 2..在命令窗口输入 nvm list,查看当前使用的 no ...