随着移动终端设备的发展,移动互联网电子产品领域Apple风头正劲,Google也持续发力,两大巨头旗下产品iPhone和Android的竞争打的火热。基于这两个平台的手机应用程序开发也进行的如火如荼。最近有机会着手进行了一些手机Flash lite技术的预研工作,尝试从另一个技术层面来探索手机应用程序的开发。
主要关注了手机Flash Lite和电脑上运行的Flash的一些技术差异。由于是在手机上运行,Flash Lite特别需要考虑硬件性能和网络传输的速度问题,因此相对Flash进行了一些功能削减。比如比较占内存、耗费CPU进行图形色彩运算的滤镜、混合模式等。如果主要用Flash Lite来做交互应用,那么这些增强视觉效果的功能被削减掉并不会对程序开发有太大影响;让开发者感到麻烦的是,Flash中一些功能较完善的标准UI控件在Flash Lite中也不能直接使用,如ComboBox,DataGrid等,开发时需要自己针对Flash Lite编写代码封装简装版UI控件。
Flash Lite开发手机应用程序值得注意的一些特点还主要体现在以下几个方面:
1. 仍然使用AS 2.0脚本,目前最高版本的Flash lite 3x播放器还基于Flash Player 7开发,而Flash编程语言AS 3.0已经推出近3年,播放器目前版本已更新到 Flash Player 10。
几年前Flash Lite推出时由于手机终端的支持不够理想,研究的人比较少;现在平台支持率虽大有改善,但Flash Lite的开发和运行环境仍过于落后,很多开发者因此觉得没有研究价值,导致应用上也比较落后,研究资料相对较少。目前所见到的应用比较多的都是单机小游戏,用来做网络互联应用的案例少之又少。但这另一方面也反映出Flash Lite的发展潜力。无线互联网的发展状况应该跟有线互联网早期的发展模式有相似之处。初期限于网速条件和硬件平台的不足,使用素材都是比较节省的文本和小型图片,应用程序和游戏都以本地安装文件为主;随着网络环境的改善和硬件的升级,声光电影等多媒体素材也将逐步占领移动互联网,各种基于网络的应用程序和游戏也会更多地涌现出来。Adobe公司一直很注重Flash的跨平台发展,相信将来无论哪种类型的手机OS胜出,都会对Flash Lite(或者干脆直接升级成Flash。补注:本文完成后已有最新消息 Adobe发布适用于google手机Android系统新版Flash10.1 )提供支持。从目前Flash在有线互联网中的发展,可以预见Flash Lite在无线网络中的一些未来。
2. Flash Lite提供了对一些手机设备专用功能的接口调用。
例如提供对手机大部分拨号按键、导航方向键和软键(左右功能键)的接口支持,可以通过侦听按键事件并设置响应来控制用户的交互流程;提供了读取手机中部分设备信息的接口,如读取电池电量、信号强度、音量、剩余内存、接入网络类型、背光时常以及震动模式等信息,以及通过Flash Lite拨打电话和发送短信的功能。但出于安全考虑,也存在很大的限制,很多设备接口Flash Lite不能直接调用,例如无法读取短信、通讯录数据,以及对手机磁盘的读写等。不过在最新升级版Flash Lite3.1中,新加入了ActionScript扩展功能,Flash Lite 开发人员可以通过ActionScript API 来使用DLL,通过该DLL文件来与主机设备公开的API进行交互,这样就实现了对手机设备操作系统API的调用(来自官方文档,未经编写实际代码测试)。
3. 沙箱安全模型更严格了。
在Flash Lite2.0时代,本地Flash Lite是能够与网络进行通信的,用下载到手机中的Flash Lite编译文件作为客户端程序来进行网络交互完全可行。自Flash Lite 3.0起,手机存储卡上的本地Flash Lite文件只能加载手机上的文件数据,无法以任何方式与网络进行通信;而用浏览器访问到的通过网络发布的Flash Lite文件,就只能与网络中的数据进行通信,无法加载手机上的本地数据。而沙箱模型以终端手机上安装的Flash Lite播放器的版本为准,比如,发布成Flash Lite2的SWF文件,如果在Flash Lite3 播放器里播放,就会遵循Flash Lite3的安全模型,因此开发者无法决定自己的程序将在哪个安全模型下运行。这也是一个关于得失取舍的辩证哲学,更严格的安全模型会限制某些功能,关闭一些技术应用的可能性通道,但是却能赢得使用者的信任,有利于技术的进一步推广和发展。
4. 重点关注了Flash Lite网络通信的相关技术。
在遵循沙箱安全模型的前提下,Flash Lite和Flash一样都支持类似于AJAX中XMLHTTPRequest对象所使用的网络通信方式,通过GET和POST方式向后台程序发送和获取数据;另外在Flash中还支持Remoting和Socket两种比较高级的通信方式,目前大多数使用Flash技术开发的游戏都采用这两种方式。Remoting是一种远程调用服务器端封装好的类与方法以进行数据通信的技术,需要在服务器端进行一些程序配置以响应客户端的连接。Flash实现了Remoting客户端并采用独家的AMF格式数据与服务器进行通信,而服务端除了Adobe官方的技术,一些其他的服务器端语言也实现了开源版本的Remoting AMF,如phpamf,rubyamf,pyamf等,对Flash Remoting提供了更全面的服务器端支持。Socket通信在Flash里内置支持,探索过程中我尝试写过一个简单的多客户端聊天室模型来熟悉通信过程 测试程序及源码下载(服务器端脚本由资深Python开发工程师 Ljian 友情提供)。需要特别注意的是对比Flash Player9 和最近升级的Flash Player 10,Socket网络通信的安全策略上发生了一些改变。Flash Player9及之前低版本的Flash播放器中,跨域以及Socket通信时只需要在目标域下放置一个经过授权配置的XML格式的安全策略文件即可。但现在这个安全策略文件只对HTTP方式的通信有效,进行Socket通信的安全策略文件需要通过Socket的方式进行发送,播放器默认会以Socket方式向服务端843端口请求策略文件,如果没有响应就尝试向Socket程序代码中设定的监听端口发送请求。所以相应的解决办法需要在服务器端程序里监听843端口,收到Socket连接请求时发送安全策略文件,或者直接在Socket客户端连接请求设定的监听端口中进行发送。在上面提到的两种高级通信方式中,Flash Lite目前只支持使用XMLSocket实现的实时通信,传递的数据要求是XML格式,相对比较低效,在目前网络环境下能否应用到实际项目中,还需要进一步考察。
无线互联网产品模式的发展,特别是一些Social Game游戏的兴起,会对手机应用程序的交互体验提出更高要求,给移动平台Flash技术的发展带来一定契机。移动平台Flash技术的大发展,有赖于Adobe公司的积极努力进取,也需要开发者的不断探索尝试和持续关注,让我们拭目以待。
【编辑推荐】