android TeamTalk资料总结-by 樱木

转自:http://www.bluefoxah.org/teamtalk/teamtalk_android_introduce.html
这篇博客,是由现TeamTalk Android负责人之一——樱木撰写,后续还会继续更新,感谢樱木的奉献。

android TT资料总结

包目录结构
这里写图片描述
android

app,主程序。
mgimlibs ,app主程序依赖的工具类,下拉刷新。
daogenerator,greenDao相关,代码自动生成。定义表结构以及表对应的实体类。
app模块划分

上层的UI 、 adapter、 fragment, activity
中层的IMService,垂直切分成多个manager模块。
下层的socket通讯
utils 程序依赖的工具类
config 常量类
DB数据结构

表结构设计

根据业务逻辑划分底层数据结构,包含四张表: UserInfo、GroupInfo、Message、Session、DepartMent
UserInfo , 公司员工的信息表
GroupInfo , 群组信息表,包含正式群与临时群
Message , 主信息表,每条消息都会对应消息实体。
Session , 最近会话列表表,记录最近会话列表
Department, 部门组织结构表
备注: 具体的结构可以参数GreenDaoGenerator.java
配置项

使用android 原生的sharedpreferences,包含的配置包括:
自动登陆配置,保存用户账号密码
会话置顶的配置
“设置”中的通知配置
网络层

使用Netty框架
数据包协议使用protobuf,具体的定义参考服务端。
一些细节

重连机制

用户登陆成功之后就会开启重连检测模块。
如果CONNECTIVITY_SERVICE 发生变化都会触发重连检测
如果网络变成可用,启动重连,重新登陆。
如果网络改为不可用,向用户展示网络状态不可用。
网络抖动导致的长连接断开,每次重连失败都会在增加重连的时间间隔。【每次重练都会先判断网络是否可用,如果不可用,关闭部署下次重练(scheduleReconnect),等待网络状态变化的触发】
心跳机制

长链接网路空闲超过时间阀值(4分钟),就会触发心跳包,包活长连接。此处采用netty原生支持IdleStateAwareChannelHandler。(netty版本的不同使用的handler也是不同的,此处使用的netty版本是3.6.6, 但是在测试的过程中发现,IdleStateAwareChannelHandler在手机休眠的事后,定时器可能会被后台关闭。心跳包就会出现异常。 所以最终改用AlarmManager来维持心跳包。 具体代码见 IMHeartBeatManager。
事件驱动EventBus

IMservice 与上层的沟通全部使用event驱动。EventBus具体的使用可以参加官方的资料。现在总结一下使用中需要注意的地方。
EventBus的事件驱动如果要取消事件的传播,必须在postThread中cancel。这个时候就会有一个比较蛋疼的地方,postThread不是UI线程,cancel的判断又是依赖于控件显示的状态的,但是cancel必须要在postThread中。 临时解决: 把event通知类型区分开来。
在子父类关系中使用EventBus,子类是继承使用父类的onEvent 需要验证。
注册没有幂等性,重复注册会报错。
主要依赖的第三方模块

底层通讯依赖netty

事件通知EventBus

sqlite 的ORM框架greenDao

UniversalImageLoader

备注: 资料网上有很多,大家可以自己找找。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值