SAMIM专业版iOS优化之离线消息 用户登录账号并连接socket成功后,会收到好友对其发送的离线消息。每条消息独立,当离线消息数量非常庞大时,数据库的插入、界面刷新操作频繁,APP就会卡顿。对此我们分为两步进行了优化。 一、处理消息类型为1000的离线消息计数器。用户登录成功后,会接收到一条消息类型为1000的计数消息,而不是之前多个独立的消息。服务器经过合并统计之后,将所有的离线消息,按照FromId(消息发送者ID)、FromType(会话类型)统计出数量,并且分别将其最后一条消息的内容、时间赋值到计数消息中。手机端同时修改了消息处理逻辑,增加是否为离线消息计数器的判断。SessionModel也同时新增了两个unReadOfflineMessageNumunRead和OnlineMessageNum两个参数,分别记录离线消息和在线消息的未读数量,原本的unReadMessageNum改为adOfflineMessageNumunRead与OnlineMessageNum的总和。解析计数消息获取到来自不同好友的具体内容,显示在首页的session列表中。对用户来说,可以看到好友发来的消息数量以及最后一条消息的时间和内容。但此时,这些离线消息并没有真正的保存到手机上。化繁为简,这样极大减少了数据库的查询及界面的刷新操作,提高了页面的流畅度。 二、发送消息类型为1001的离线消息的请求。用户进入到某个好友的聊天界面时,手机端给服务器发送一条获取该好友所有离线消息的请求。手机端获取到离线消息后,按照在线消息的处理方式,存储并显示所有消息。这时该好友的全部离线消息已从服务器发送至手机端。
|