Mobile Widget到底是個什么玩意?
Widget與移動設(shè)備
Widget是什么?
Widget 是一個廣泛的概念,從其字面意思可以翻譯成小物件,小工具,小軟件。Widget的實現(xiàn)可以多種多樣,但是都有一個共同特性,即可以源碼復用。換句話說,Widget軟件只要開發(fā)一次,便可以在具有該Widget運行引擎平臺下完美的運行,具有完全一樣的功能,UI風格和用戶體驗方式。
從 Widget的實現(xiàn)方式上來說主要有兩種,一種是基于DHTML, JAVASCRIPT和CSS技術(shù)的Widget。另一種是基于Adobe Flash技術(shù)的Widget。目前大多數(shù)Widget實現(xiàn)還是基于前者,尤其是目前日漸流行的移動設(shè)備上的Widget技術(shù)均指Web Widget。
Widget的特點
- 小尺寸:Widget的尺寸通常都不大,并且運行速度比較快,占用的系統(tǒng)資源也較少。
- 形式多樣:Widget的展現(xiàn)方式可以多種多樣,可以是一個懸浮在窗口里的小圖標,可以是占用全屏的全屏應(yīng)用,也可以是插入某個應(yīng)用子窗口中的小程序。
- 功能多樣:Widget應(yīng)用可以提供的功能可以多種多樣(依賴Widget引擎提供的功能),如提供新聞資訊閱讀,視頻觀看,系統(tǒng)狀態(tài)監(jiān)視,天氣預報,股票信息,時鐘,聯(lián)系人管理,短信接收發(fā)送等。
- 美觀:Widget應(yīng)用設(shè)計的一般都比較漂亮,并且具有很好的用戶體驗和操作方式。
- 個性化強:由于Widget的小尺寸和多樣的形式和功能,因此用戶可以隨意的安裝、擺放和設(shè)置Widget,達到個性化的Widget展示和使用效果。
- 開發(fā)方便:由于大多數(shù)Widget都是基于Web技術(shù)或者Flash技術(shù),并且這兩種技術(shù)都已經(jīng)發(fā)展成熟,提供大量的集成開發(fā)環(huán)境以及可以復用的代碼。因此,開發(fā)人員可以很快速的開發(fā)出功能強大、界面美觀的Widget應(yīng)用。
Widget應(yīng)用
- 桌面電腦上的Widget
-
- Yahoo Widget
- Mac OS dashbord
- Windows Vista側(cè)邊欄
- Windows 7桌面小工具
- 移動終端上的Widget
- 個性化首頁中的Widget
-
- Netvibes
- iGoogle
- 博客中的Widget
移動平臺上的Widget規(guī)范(Web Widget)
目前,移動平臺上支持的Widget運行環(huán)境主要遵循三套規(guī)范:W3C Widget規(guī)范、BONDI Widget規(guī)范和JIL Widget規(guī)范。
- W3C Widget規(guī)范
該規(guī)范是由W3C組織制定,包含6個子規(guī)范,主要定義了Widget的運行時狀態(tài),打包和配置,數(shù)字簽名,自動升級,以及核心API和事件處理。
- BONDI Widget規(guī)范
該規(guī)范由OMTP組織制定,對W3C Widget規(guī)范進行了擴充。嚴格定義了Widget的安全驗證體系,豐富了API接口。目前W3C組織考慮將BONDI規(guī)范納入到標準中。
- JIL Widget規(guī)范
該規(guī)范是由中國移動、沃達豐、軟銀以及Verizon共同提出和定義的Widget規(guī)范。該規(guī)范目前主要是被中國移動的BEA平臺所支持。
Widget引擎
Widget引擎的作用
Widget引擎為安裝、運行、管理、升級,驗證Widget應(yīng)用提供了一整套完整的框架體系。
- 安裝
Widget的發(fā)布方式可以多種多樣,可以是基于Web頁面的發(fā)布方式也可以是基于安裝包的發(fā)布方式,因此Widget引擎需要對各種發(fā)布方式兼容,將用戶的Widget應(yīng)用安裝和部署到當前的Widget運行環(huán)境中。
- 運行
Widget應(yīng)用有其自身的生命周期(初始化,運行,暫停,恢復,終止),因此Widget引擎有責任管理每個Widget應(yīng)用的生命周期,在Widget不同的階段執(zhí)行Widget內(nèi)部定義的事件處理代碼。
- 管理
Widget引擎負責像用戶提供已安裝Widget應(yīng)用的管理功能,用戶可以通過Widget引擎查看當前運行的Widget運行狀態(tài),占用的系統(tǒng)資源,終止應(yīng)用,運行應(yīng)用以及刪除應(yīng)用。
- 升級
Widget引擎會根據(jù)Widget的配置文件定期的檢測Widget的版本,并且動態(tài)的更新Widget應(yīng)用。
- 驗證
出于安全性的考慮,Widget應(yīng)用都需要進行簽名,并且需要顯示的聲明其需要使用的特殊功能接口。并且在運行時刻,Widget引擎需要對Widget調(diào)用受限接口的合法性進行驗證。
Widget引擎與瀏覽器的關(guān)系
由于Web Widget應(yīng)用采用DHTML、JAVASCRIPT和CSS技術(shù)實現(xiàn),因此運行Widget需要瀏覽器引擎作為支持。但是通常的瀏覽器引擎不足以支撐 Widget的應(yīng)用。比如:Widget規(guī)范中嚴格的定義了Widget的打包方式,尤其固有的配置和部署方式,通常的瀏覽器引擎是無法識別并且按照規(guī)范要求正確安裝和部署的。某些Widget規(guī)范中定義了Widget應(yīng)用對設(shè)備能力的訪問,這也是通常瀏覽器引擎所不支持的。因此,如果瀏覽器需要支持某個特定Widget規(guī)范需要對瀏覽器引擎進行擴展,對Widget規(guī)范中定義的打包發(fā)布、升級安裝、安全驗證以及設(shè)備相關(guān)的API進行擴展和支持。
這里還有一類Widget不需要訪問設(shè)備功能,并且并不遵循某套特定的Widget規(guī)范,而只是以Web頁面中的一個小控件或者小程序形式出現(xiàn),該 Widget應(yīng)用是不需要對瀏覽器做擴展。但由于沒有一套標準統(tǒng)一的規(guī)范標準作為支持,因此只能由該站點開發(fā)者自己去設(shè)計并且開發(fā),不具有廣泛性。
Widget引擎框架設(shè)計
這里的Widget引擎框架主要是以Android平臺上的Widget引擎的設(shè)計為基礎(chǔ),所支持的標準不限(可包括W3C,BONDI,JIL規(guī)范)。
Widget引擎框架

- Widgets
如上圖所示,Widget表示該Widget引擎所支持的各種Widget應(yīng)用,該應(yīng)用采用DHTML, JAVASCRIPT, CSS技術(shù)編寫和實現(xiàn)。該Widget引擎所支持的Widget種類完全依賴于APIs Implement部分。
- Widget Module Loader
模塊載入器的主要作用有兩個:第一,負責各個已實現(xiàn)的Widget規(guī)范API模塊的初始化。第二,負責在瀏覽器DOM樹中注冊載入的API模塊對象,以使得Widget應(yīng)用中可以使用相應(yīng)的接口、對象和屬性。
- Application Management
應(yīng)用程序管理模塊負責Widget應(yīng)用的生命周期管理、應(yīng)用程序的下載安裝,以及應(yīng)用程序的刪除。應(yīng)用程序管理模塊與Widget DOM對象有緊密聯(lián)系。比如:Widget應(yīng)用在初始化階段為resume事件注冊了回調(diào)函數(shù),在該函數(shù)中會對暫停時的應(yīng)用數(shù)據(jù)進行恢復操作。應(yīng)用程序管理模塊在接收到Widget的恢復事件時,有責任調(diào)用該應(yīng)用注冊的resume回調(diào)函數(shù),并且執(zhí)行其定義的恢復操作。
- Security Management
安全管理模塊負責Widget應(yīng)用的安全驗證。比如在Widget應(yīng)用安裝時,安全管理模塊需要對Widget應(yīng)用簽名的合法性進行驗證,并且對 Widget聲明的設(shè)備接口使用權(quán)限進行驗證。當Widget運行時,Widget應(yīng)用訪問某個設(shè)備接口(比如Camera),安全管理模塊需要對該應(yīng)用是否有權(quán)訪問該設(shè)備接口進行驗證。
- APIs Implement
API實現(xiàn)包含了各個Widget引擎需要支持的Widget規(guī)范的底層實現(xiàn)。該部分的實現(xiàn)可以是純JAVA實現(xiàn)、可以是JAVASCRIPT和JAVA混合實現(xiàn)、可以是JAVA和C/C++混合實現(xiàn)、亦可以是純C/C++實現(xiàn)。
Widget引擎實現(xiàn)方式
基于WebKit引擎的擴展實現(xiàn)
該實現(xiàn)方式直接修改和擴展WebKit引擎,在引擎內(nèi)部創(chuàng)建widget的DOM對象,并且提供抽象的調(diào)用方法。除此之外,需要在WebKit引擎中實現(xiàn)對各個規(guī)范模塊的調(diào)用機制。
- 基于JAVA語言的模塊調(diào)用
該實現(xiàn)方式需要對WebKit引擎實現(xiàn)JAVASCRIPT語言和JAVA語言之間的平滑調(diào)用機制。即Widget應(yīng)用訪問widget對象的某個API接口時,WebKit引擎需要將該SCRIPING對象動態(tài)的轉(zhuǎn)換成相應(yīng)的JAVA對象,并且調(diào)用其相應(yīng)的方法。并且,將該JAVA方法執(zhí)行后的結(jié)果動態(tài)的轉(zhuǎn)換成JAVASCRIPT對象,并且返回給Widget應(yīng)用。
采用該機制實現(xiàn)的API模塊均用可采用JAVA語言來實現(xiàn)。因此,該實現(xiàn)方式具有實現(xiàn)速度快的特點,但是也正因為與JAVA語言的緊密關(guān)系移植性不好。
- 基于C/C++語言的模塊調(diào)用
所有的API模塊的擴展均采用C/C++語言來實現(xiàn),這類似gears的實現(xiàn)方式。引擎內(nèi)幕會將Widget應(yīng)用使用的JAVASCRIPT方法動態(tài)轉(zhuǎn)換成定義的C/C++對象,并且執(zhí)行相應(yīng)的方法。而后將返回結(jié)果轉(zhuǎn)換成JAVASCRIPT方法返回給Widget對象。
采用該機制實現(xiàn)的API模塊均采用C/C++語言來實現(xiàn),因此開發(fā)周期相對較長,但是具有良好的移植性。
采用WebKit引擎擴展實現(xiàn)方式,可以讓瀏覽器引擎原生的對Widget應(yīng)用進行支持,但是在每次WebKit升級時,需要對修改的代碼進行合并和再發(fā)布。
基于WebKit插件的擴展實現(xiàn)
該實現(xiàn)方式基于NPAPI插件擴展技術(shù)的基礎(chǔ)之上。將Widget的DOM對象實現(xiàn)包含在NPAPI插件中,當瀏覽器檢測到該對象的訪問時,動態(tài)的載入該NPAPI插件,并且將所有對Widget DOM對象的訪問操作均轉(zhuǎn)發(fā)給NPAPI插件來完成。
NPAI插件的實現(xiàn)方式如WebKit引擎擴展實現(xiàn)一樣,也有JAVA和C/C++兩種實現(xiàn)方式,這里不再重復。
采用該實現(xiàn)方式的擴展無需對WebKit引擎修改,但是需要按照NPAPI規(guī)范,實現(xiàn)完整的SCRIPTING插件。
基于C/S架構(gòu)的擴展實現(xiàn)
該實現(xiàn)方式采用借用了C/S設(shè)計模式的思想。在Widget引擎初始化階段會啟動一個內(nèi)部的服務(wù),該服務(wù)會監(jiān)聽系統(tǒng)中某個端口。Widget引擎運行時,如果訪問Widget對象的某個方法時,封裝的Widget JS對象會向服務(wù)端口發(fā)送方法請求。服務(wù)端接受請求后,首先會對請求進行合法性驗證和分析,然后調(diào)用相應(yīng)的接口來完成實際的操作。并且將結(jié)果以異步的方式返回給封裝的Widget JS對象,而由該對象通知Widget應(yīng)用操作結(jié)果。
C/S架構(gòu)的擴展實現(xiàn)也可以采用JAVA和C/C++實現(xiàn)方式,這里不再重復。
采用該方式實現(xiàn)的擴展有良好的靈活性,不同的Widget規(guī)范定義的Widget應(yīng)用只需要包含相應(yīng)的Widget封裝JS包即可正確運行。但是由于采用C/S模式的調(diào)用方式,因此在執(zhí)行效率上略低于直接調(diào)用的方式。
Browser&Widget
這部分對Browser的設(shè)計提出一個概念層面上的設(shè)計。如下圖所示:

- Table Manager
負責管理瀏覽器中各個Table頁面,每個Table頁面是一個獨立的Web頁面或者Widget應(yīng)用。
- Bookmark Manager
負責管理書簽,該書簽包括用戶收藏的網(wǎng)站URL以及喜愛的RSS頻道和文章信息。
- RSS Manager
負責RSS頻道的訂閱、RSS新聞列表、RSS頻道退訂
- Plugin Manager
負責管理已經(jīng)安裝的瀏覽器插件
- Notification Manager
負責事件通知管理,比如RSS新聞數(shù)據(jù)的更新通知,瀏覽器插件的升級通知,Widget升級通知等。
- History Manager
負責記錄當前Table的運行數(shù)據(jù),包括訪問的URL歷史,當前窗口大小位置信息,可用于當瀏覽器crash后的狀態(tài)恢復操作。
- Download Manager
負責瀏覽器的下載管理,包括android軟件的下載、安裝,Widget軟件的下載、安裝
- Gesture Manager
負責手勢操作的自定義操作管理。
- Thread Manager
為了加快瀏覽器的載入效率,每個Table在一個單獨的線程中運行,因此對線程的運行狀態(tài)需要一個統(tǒng)一管理機制。
- Skin Manager
負責Browser外觀的管理,用戶可以通過該模塊動態(tài)的給系統(tǒng)更換皮膚和顯示方式。
- Widget Manager
負責Widget引用的下載、安裝、刪除、以及運行時環(huán)境的支持。



























