基于AMF的Android数据通信
马巍+许合利
摘要:文章将Flash/Flex开发中用于网络通信的AMF技术,移植到Android平台,实现了Android应用的高效网络数据通信。关键词:AMF;Android;BlazeDS;数据通信
截至到2015年1月,Android在国内移动操作系统中的份额已达80.4%,市场占有率相比IOS等系统具有巨大的优势。Android系统的网络应用开发常受到传输数据类型繁杂、数据量大、手机流量限制等制约,因此选用一种通信效率高、解析速度快的数据传输技术可有效降低程序响应时间、提高用户体验。
1AMF
AMF(Action Message Format)是Adobe公司开发的一种免费开源、专用于Flash/Flex应用与服务器端通信的数据编码模式,其通信过程基于HTTP协议,具有兼容性好、传输效率高、解析速度快等优点。
AMF可将基本数据类型如List、Array直接进行编码,并在服务器端自动解析为相应的对象。这种编码模式既符合面向对象的编程思想,又简化了编程人员的工作、缩短开发时间;AMF对数据进行二进制编码,可实现数据的高度压缩,因此非常适合传输类型繁杂、数量大的数据。数据量越大,AMF的传输效率就越高,远远超过HTTP、Web Service等Android应用常使用的传输方式。
2 BlazeDS
BlazeDS是Adobe公司开发的一款免费开源的服务器端消息服务组件,基于远程对象调用(Remote Object)和消息服务(Message Service)技术,用于和Flash/Flex应用程序通信。BlazeDS包含了AMF的Java实现,通常以Servlet的方式部署在Web服务器上。
3 Android平台的数据传输
Android应用与服务器进行网络通信,目前主要有Socket、HTTP和Web Service三种方式。Socket方式主要应用于实时通讯,效率最高,但由于其涉及底层协议,实现较复杂;HTTP方式因实现简单、方便,更为常用,但通信效率不高;Web Service是一个支持不同操作系统、不同软件在网络间互相操作的模块化组件,常用于Android应用调用第三方服务器提供的数据服务,由于底层通常使用HTTP和XML传输数据,通信效率也不高。
4 AMF在Android平台实现
BlazeDS的源代码中已包括AMF的传输、序列化与反序列化等功能,但因为Android SDK与JDK的差异,无法直接在Android上使用。经研究,使用第三方的AMF解析组件并将组件针对Android SDK进行修改是更为高效的解决方法。
第三方AMF解析组件am~serializer实现了BlazeDS中AMF序列化与反序列化的主要功能,可在Google Code下载。但在Android上使用am~serializer,需解决Android SDK缺少部分类文件如Property Descriptor类、与服务器端通信类的问题。
4.1内省类
Property Descriptor在JDK中是一个用于内省的类,在不修改Android SDK的前提下可用“反射”机制模拟出其基本功能。
首先需建立类Property Descriptor,声明成员变量name、display Name、read Method、write Method,并生成对应的get和set方法。
然后,建立用于模拟内省功能的类Property DescriptorTool,部分代码如下.
4.3通信类
由于amf-serial izer组件只能解析AMF数据,没有与服务器端通信的功能,所以还需要参考BlazeDS源代码中的AMFConnection类,实现网络传输的功能。
5测试
为验证AMF的数据传输效率优于Web Service和HHTTP方式,以学生基本信息数据为例,把测试程序使用不同的数据传输方式与网络服务器通信所耗费的时间进行比较。为减小误差,每组数据测试lO次、取平均值如表l所示。
6结语
测试数据显示,在Android移动应用开发中使用AMF数据通信格式是理想的选择,相比HTTP和Web Service方式,可以更好地节省流量、提高传输效率。