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. oracle中关于删除表purge语句和闪回语句的基本使用

    语法: drop table ... purge; 例子:drop table test purge; purge是直接删除表,不保留到回收站,10G开始默认drop表式改名移动到回收站; 闪回(fl ...

  2. Java-Spring MVC:JAVA之常用的一些Spring MVC的路由写法以及参数传递方式

    ylbtech-Java-Spring MVC:JAVA之常用的一些Spring MVC的路由写法以及参数传递方式 1.返回顶部 1. 常用的一些Spring MVC的路由写法以及参数传递方式. 这是 ...

  3. Lucene中Analyzer语句分析

    Lucene中Analyzer语句分析,利用lucene中自带的词法分析工具Analyzer,进行对句子的分析. 源代码如下: package com.test; import java.io.IOE ...

  4. 第九课: - 导出到CSV / EXCEL / TXT

    第 9 课 将数据从microdost sql数据库导出到cvs,excel和txt文件. In [1]: # Import libraries import pandas as pd import ...

  5. jquery mobile在移动设备上显示太大问题

    head里边加入这个会让客户端元素很大...宽度都是device-width,不过比较大! <meta name="viewport" content="width ...

  6. js手机网络检测

    <!DOCTYPE HTML> <html lang="en"> <head> <meta charset=UTF-8"> ...

  7. 开源作品-PHP写的在线文件管理工具(单文件绿色版)-SuExplorer_PHP_3_0

    前言:项目开发过程中,网站一般部署到远程服务器,所以文件管理就不能和本机操作一样方便.通常文件管理是用ftp下载到本地,修改后再上传,或者远程登录到服务器进行修改.但是这些操作都依赖于复杂的第三方软件 ...

  8. python安装Django需要环境

    Django==1.10.3 -e git+https://github.com/duoshuo/duoshuo-python-sdk.git#egg=duoshuo-python-sdk djang ...

  9. Online ML那点事>-

    一:译自wiki:    KeyWord:标签反馈; Survey: online machine learning is a model of induction that learns one i ...

  10. 编译VTK的MFC库

    原文链接:http://blog.csdn.net/left_la/article/details/7069708 本人做了少量修改! Win7 + VS2010 + CMake2.8.6 + VTK ...