项目简介:线上语音直播社交。
主要职责:Android 组负责人,负责安卓移动端 APP 的架构设计,部分模块开发和新技术预研工作, 首页,房间模块。
负责模块技术要点:
1、框架采用 mvc 模式,分模块搭建,使用自定义协议实现的 socket 进行与服务器通信, 后改为 netty 封装的工具类通信。
2、数据存储使用 greendao,数据序列化使用 protobuf。Protobuf 优点序列化反序列化 速度快,数据传输过程中占用空间小,但是本地生成对象的文件很大。
3、IM 消息语音等模块使用网易云信 sdk,搭配本地 http,socket 和服务器交互。 4、优化内存,app 冷启动优化,包体积压缩,view 绘制效率等
遇到的问题:
1、直播间刷礼物卡顿。2、tcp 经常断线重连
解决方案:
1、通过使用 Android monitor 查看 cpu 使用情况,定位到卡顿的代码,一是在主线程解 析 protobuf 对象比较耗时,将解析对象的步骤放在子线程中进行,另一方面,UI 页面只 用了 wrap_content 的属性,内容变化引起控件大小的变化,从而引起整个 view 的频繁测 量布局绘制,引起 surfaceview 更新,消耗 cpu 从而引起卡顿,解决办法:将 textview 等内容变化的控件大小固定,不要使用wrap_content属性。不会引起整个view的重新测 量绘制,减少 surfaceview 更新。
2、采用动态心跳策略: 当在前台运行时使用固定时间的心跳间隔,后台运行时采用先发 送两次较短时间的心跳,再慢慢加大步长拉大间隔时间的方式,到达服务端下发的最大时 间,取最小和最大之间的随机数作为心跳间隔来维持心跳