@Heath
2016-08-30T09:16:07.000000Z
字数 579
阅读 1110
13331130 李有才
计算机网络
本次项目中我参与的比较多,主要是负责客户端的代码实现,采用安卓做客户端呢,有一个比较棘手的问题是,安卓的各个Activity是相对独立的,但是在我们的应用中建立好的Socket应该是在全局通用的。在经过查阅相关文档后,采用如下解决方案:
在应用中建立一个继承自Application的类,这个类可以被全局访问到,因此客户端的Socket核心代码在这各类中进行实现。同时在设计的时候对这个类采用单例模式,确保不要出现资源的重复建立。
界面的更新,由于Android的自身系统设计,必须在主线程中更新界面。因此采用Android的Handler + Message机制来沟通Socket数据和界面UI,界面启动时把自己的handler实例传递给单例模式的Application,后台收到数据时,对消息进行解读后通过handler想前台界面发送Message更新界面UI。
在本次项目中,一个比较深刻的体会就是一定要注意好通讯协议的设计,不要急于做代码的实现,一个精心设计的协议会给编程带来很大的方便。我们项目的协议虽然手扩展起来很方面,同时采用kryoNet开源框架来辅助数据的序列化和反序列化,但也正是因为这种扩展的便利性,导致了后期想到什么字段就添加什么字段,导致整个协议的分装很臃肿,这是本次项目的一个遗憾。