Flash Lite移動(dòng)應(yīng)用程序開(kāi)發(fā)初探
隨著移動(dòng)終端設(shè)備的發(fā)展,移動(dòng)互聯(lián)網(wǎng)電子產(chǎn)品領(lǐng)域Apple風(fēng)頭正勁,Google也持續(xù)發(fā)力,兩大巨頭旗下產(chǎn)品iPhone和Android的競(jìng)爭(zhēng)打的火熱?;谶@兩個(gè)平臺(tái)的手機(jī)應(yīng)用程序開(kāi)發(fā)也進(jìn)行的如火如荼。最近有機(jī)會(huì)著手進(jìn)行了一些手機(jī)Flash lite技術(shù)的預(yù)研工作,嘗試從另一個(gè)技術(shù)層面來(lái)探索手機(jī)應(yīng)用程序的開(kāi)發(fā)。
主要關(guān)注了手機(jī)Flash Lite和電腦上運(yùn)行的Flash的一些技術(shù)差異。由于是在手機(jī)上運(yùn)行,F(xiàn)lash Lite特別需要考慮硬件性能和網(wǎng)絡(luò)傳輸?shù)乃俣葐?wèn)題,因此相對(duì)Flash進(jìn)行了一些功能削減。比如比較占內(nèi)存、耗費(fèi)CPU進(jìn)行圖形色彩運(yùn)算的濾鏡、混合模式等。如果主要用Flash Lite來(lái)做交互應(yīng)用,那么這些增強(qiáng)視覺(jué)效果的功能被削減掉并不會(huì)對(duì)程序開(kāi)發(fā)有太大影響;讓開(kāi)發(fā)者感到麻煩的是,F(xiàn)lash中一些功能較完善的標(biāo)準(zhǔn)UI控件在Flash Lite中也不能直接使用,如ComboBox,DataGrid等,開(kāi)發(fā)時(shí)需要自己針對(duì)Flash Lite編寫(xiě)代碼封裝簡(jiǎn)裝版UI控件。
Flash Lite開(kāi)發(fā)手機(jī)應(yīng)用程序值得注意的一些特點(diǎn)還主要體現(xiàn)在以下幾個(gè)方面:
1. 仍然使用AS 2.0腳本,目前最高版本的Flash lite 3x播放器還基于Flash Player 7開(kāi)發(fā),而Flash編程語(yǔ)言AS 3.0已經(jīng)推出近3年,播放器目前版本已更新到 Flash Player 10。
幾年前Flash Lite推出時(shí)由于手機(jī)終端的支持不夠理想,研究的人比較少;現(xiàn)在平臺(tái)支持率雖大有改善,但Flash Lite的開(kāi)發(fā)和運(yùn)行環(huán)境仍過(guò)于落后,很多開(kāi)發(fā)者因此覺(jué)得沒(méi)有研究?jī)r(jià)值,導(dǎo)致應(yīng)用上也比較落后,研究資料相對(duì)較少。目前所見(jiàn)到的應(yīng)用比較多的都是單機(jī)小游戲,用來(lái)做網(wǎng)絡(luò)互聯(lián)應(yīng)用的案例少之又少。但這另一方面也反映出Flash Lite的發(fā)展?jié)摿?。無(wú)線互聯(lián)網(wǎng)的發(fā)展?fàn)顩r應(yīng)該跟有線互聯(lián)網(wǎng)早期的發(fā)展模式有相似之處。初期限于網(wǎng)速條件和硬件平臺(tái)的不足,使用素材都是比較節(jié)省的文本和小型圖片,應(yīng)用程序和游戲都以本地安裝文件為主;隨著網(wǎng)絡(luò)環(huán)境的改善和硬件的升級(jí),聲光電影等多媒體素材也將逐步占領(lǐng)移動(dòng)互聯(lián)網(wǎng),各種基于網(wǎng)絡(luò)的應(yīng)用程序和游戲也會(huì)更多地涌現(xiàn)出來(lái)。Adobe公司一直很注重Flash的跨平臺(tái)發(fā)展,相信將來(lái)無(wú)論哪種類(lèi)型的手機(jī)OS勝出,都會(huì)對(duì)Flash Lite(或者干脆直接升級(jí)成Flash。補(bǔ)注:本文完成后已有最新消息 Adobe發(fā)布適用于google手機(jī)Android系統(tǒng)新版Flash10.1 )提供支持。從目前Flash在有線互聯(lián)網(wǎng)中的發(fā)展,可以預(yù)見(jiàn)Flash Lite在無(wú)線網(wǎng)絡(luò)中的一些未來(lái)。
2. Flash Lite提供了對(duì)一些手機(jī)設(shè)備專(zhuān)用功能的接口調(diào)用。
例如提供對(duì)手機(jī)大部分撥號(hào)按鍵、導(dǎo)航方向鍵和軟鍵(左右功能鍵)的接口支持,可以通過(guò)偵聽(tīng)按鍵事件并設(shè)置響應(yīng)來(lái)控制用戶(hù)的交互流程;提供了讀取手機(jī)中部分設(shè)備信息的接口,如讀取電池電量、信號(hào)強(qiáng)度、音量、剩余內(nèi)存、接入網(wǎng)絡(luò)類(lèi)型、背光時(shí)常以及震動(dòng)模式等信息,以及通過(guò)Flash Lite撥打電話和發(fā)送短信的功能。但出于安全考慮,也存在很大的限制,很多設(shè)備接口Flash Lite不能直接調(diào)用,例如無(wú)法讀取短信、通訊錄數(shù)據(jù),以及對(duì)手機(jī)磁盤(pán)的讀寫(xiě)等。不過(guò)在最新升級(jí)版Flash Lite3.1中,新加入了ActionScript擴(kuò)展功能,F(xiàn)lash Lite 開(kāi)發(fā)人員可以通過(guò)ActionScript API 來(lái)使用DLL,通過(guò)該DLL文件來(lái)與主機(jī)設(shè)備公開(kāi)的API進(jìn)行交互,這樣就實(shí)現(xiàn)了對(duì)手機(jī)設(shè)備操作系統(tǒng)API的調(diào)用(來(lái)自官方文檔,未經(jīng)編寫(xiě)實(shí)際代碼測(cè)試)。
3. 沙箱安全模型更嚴(yán)格了。
在Flash Lite2.0時(shí)代,本地Flash Lite是能夠與網(wǎng)絡(luò)進(jìn)行通信的,用下載到手機(jī)中的Flash Lite編譯文件作為客戶(hù)端程序來(lái)進(jìn)行網(wǎng)絡(luò)交互完全可行。自Flash Lite 3.0起,手機(jī)存儲(chǔ)卡上的本地Flash Lite文件只能加載手機(jī)上的文件數(shù)據(jù),無(wú)法以任何方式與網(wǎng)絡(luò)進(jìn)行通信;而用瀏覽器訪問(wèn)到的通過(guò)網(wǎng)絡(luò)發(fā)布的Flash Lite文件,就只能與網(wǎng)絡(luò)中的數(shù)據(jù)進(jìn)行通信,無(wú)法加載手機(jī)上的本地?cái)?shù)據(jù)。而沙箱模型以終端手機(jī)上安裝的Flash Lite播放器的版本為準(zhǔn),比如,發(fā)布成Flash Lite2的SWF文件,如果在Flash Lite3 播放器里播放,就會(huì)遵循Flash Lite3的安全模型,因此開(kāi)發(fā)者無(wú)法決定自己的程序?qū)⒃谀膫€(gè)安全模型下運(yùn)行。這也是一個(gè)關(guān)于得失取舍的辯證哲學(xué),更嚴(yán)格的安全模型會(huì)限制某些功能,關(guān)閉一些技術(shù)應(yīng)用的可能性通道,但是卻能贏得使用者的信任,有利于技術(shù)的進(jìn)一步推廣和發(fā)展。
4. 重點(diǎn)關(guān)注了Flash Lite網(wǎng)絡(luò)通信的相關(guān)技術(shù)。
在遵循沙箱安全模型的前提下,F(xiàn)lash Lite和Flash一樣都支持類(lèi)似于AJAX中XMLHTTPRequest對(duì)象所使用的網(wǎng)絡(luò)通信方式,通過(guò)GET和POST方式向后臺(tái)程序發(fā)送和獲取數(shù)據(jù);另外在Flash中還支持Remoting和Socket兩種比較高級(jí)的通信方式,目前大多數(shù)使用Flash技術(shù)開(kāi)發(fā)的游戲都采用這兩種方式。Remoting是一種遠(yuǎn)程調(diào)用服務(wù)器端封裝好的類(lèi)與方法以進(jìn)行數(shù)據(jù)通信的技術(shù),需要在服務(wù)器端進(jìn)行一些程序配置以響應(yīng)客戶(hù)端的連接。Flash實(shí)現(xiàn)了Remoting客戶(hù)端并采用獨(dú)家的AMF格式數(shù)據(jù)與服務(wù)器進(jìn)行通信,而服務(wù)端除了Adobe官方的技術(shù),一些其他的服務(wù)器端語(yǔ)言也實(shí)現(xiàn)了開(kāi)源版本的Remoting AMF,如phpamf,rubyamf,pyamf等,對(duì)Flash Remoting提供了更全面的服務(wù)器端支持。Socket通信在Flash里內(nèi)置支持,探索過(guò)程中我嘗試寫(xiě)過(guò)一個(gè)簡(jiǎn)單的多客戶(hù)端聊天室模型來(lái)熟悉通信過(guò)程 測(cè)試程序及源碼下載(服務(wù)器端腳本由資深Python開(kāi)發(fā)工程師 Ljian 友情提供)。需要特別注意的是對(duì)比Flash Player9 和最近升級(jí)的Flash Player 10,Socket網(wǎng)絡(luò)通信的安全策略上發(fā)生了一些改變。Flash Player9及之前低版本的Flash播放器中,跨域以及Socket通信時(shí)只需要在目標(biāo)域下放置一個(gè)經(jīng)過(guò)授權(quán)配置的XML格式的安全策略文件即可。但現(xiàn)在這個(gè)安全策略文件只對(duì)HTTP方式的通信有效,進(jìn)行Socket通信的安全策略文件需要通過(guò)Socket的方式進(jìn)行發(fā)送,播放器默認(rèn)會(huì)以Socket方式向服務(wù)端843端口請(qǐng)求策略文件,如果沒(méi)有響應(yīng)就嘗試向Socket程序代碼中設(shè)定的監(jiān)聽(tīng)端口發(fā)送請(qǐng)求。所以相應(yīng)的解決辦法需要在服務(wù)器端程序里監(jiān)聽(tīng)843端口,收到Socket連接請(qǐng)求時(shí)發(fā)送安全策略文件,或者直接在Socket客戶(hù)端連接請(qǐng)求設(shè)定的監(jiān)聽(tīng)端口中進(jìn)行發(fā)送。在上面提到的兩種高級(jí)通信方式中,F(xiàn)lash Lite目前只支持使用XMLSocket實(shí)現(xiàn)的實(shí)時(shí)通信,傳遞的數(shù)據(jù)要求是XML格式,相對(duì)比較低效,在目前網(wǎng)絡(luò)環(huán)境下能否應(yīng)用到實(shí)際項(xiàng)目中,還需要進(jìn)一步考察。
無(wú)線互聯(lián)網(wǎng)產(chǎn)品模式的發(fā)展,特別是一些Social Game游戲的興起,會(huì)對(duì)手機(jī)應(yīng)用程序的交互體驗(yàn)提出更高要求,給移動(dòng)平臺(tái)Flash技術(shù)的發(fā)展帶來(lái)一定契機(jī)。移動(dòng)平臺(tái)Flash技術(shù)的大發(fā)展,有賴(lài)于Adobe公司的積極努力進(jìn)取,也需要開(kāi)發(fā)者的不斷探索嘗試和持續(xù)關(guān)注,讓我們拭目以待。
【編輯推薦】