About Mobile Widget
如需转载,请注明出处!
WebSite: http://www.jjos.org/
作者: 姜江 linuxemacs@gmail.com
QQ: 457283
Widget与移动设备
Widget是什么
Widget是一个广泛的概念,从其字面意思可以翻译成小物件,小工具,小软件。Widget的实现可以多种多样,但是都有一个共同特性,即可以源码复用。换句话说,Widget软件只要开发一次,便可以在具有该Widget运行引擎平台下完美的运行,具有完全一样的功能,UI风格和用户体验方式。
从Widget的实现方式上来说主要有两种,一种是基于DHTML, JAVASCRIPT和CSS技术的Widget。另一种是基于Adobe Flash技术的Widget。目前大多数Widget实现还是基于前者,尤其是目前日渐流行的移动设备上的Widget技术均指Web Widget。
Widget的特点
- 小尺寸:Widget的尺寸通常都不大,并且运行速度比较快,占用的系统资源也较少。
- 形式多样:Widget的展现方式可以多种多样,可以是一个悬浮在窗口里的小图标,可以是占用全屏的全屏应用,也可以是插入某个应用子窗口中的小程序。
- 功能多样:Widget应用可以提供的功能可以多种多样(依赖Widget引擎提供的功能),如提供新闻资讯阅读,视频观看,系统状态监视,天气预报,股票信息,时钟,联系人管理,短信接收发送等。
- 美观:Widget应用设计的一般都比较漂亮,并且具有很好的用户体验和操作方式。
- 个性化强:由于Widget的小尺寸和多样的形式和功能,因此用户可以随意的安装、摆放和设置Widget,达到个性化的Widget展示和使用效果。
- 开发方便:由于大多数Widget都是基于Web技术或者Flash技术,并且这两种技术都已经发展成熟,提供大量的集成开发环境以及可以复用的代码。因此,开发人员可以很快速的开发出功能强大、界面美观的Widget应用。
Widget应用
- 桌面电脑上的Widget
- Yahoo Widget
- Mac OS dashbord
- Windows Vista侧边栏
- Windows 7桌面小工具
- 移动终端上的Widget
- 个性化首页中的Widget
- Netvibes
- iGoogle
- 博客中的Widget
移动平台上的Widget规范(Web Widget)
目前,移动平台上支持的Widget运行环境主要遵循三套规范:W3C Widget规范、BONDI Widget规范和JIL Widget规范。
- W3C Widget规范
该规范是由W3C组织制定,包含6个子规范,主要定义了Widget的运行时状态,打包和配置,数字签名,自动升级,以及核心API和事件处理。
- BONDI Widget规范
该规范由OMTP组织制定,对W3C Widget规范进行了扩充。严格定义了Widget的安全验证体系,丰富了API接口。目前W3C组织考虑将BONDI规范纳入到标准中。
- JIL Widget规范
该规范是由中国移动、沃达丰、软银以及Verizon共同提出和定义的Widget规范。该规范目前主要是被中国移动的BEA平台所支持。
Widget引擎
Widget引擎的作用
Widget引擎为安装、运行、管理、升级,验证Widget应用提供了一整套完整的框架体系。
- 安装
Widget的发布方式可以多种多样,可以是基于Web页面的发布方式也可以是基于安装包的发布方式,因此Widget引擎需要对各种发布方式兼容,将用户的Widget应用安装和部署到当前的Widget运行环境中。
- 运行
Widget应用有其自身的生命周期(初始化,运行,暂停,恢复,终止),因此Widget引擎有责任管理每个Widget应用的生命周期,在Widget不同的阶段执行Widget内部定义的事件处理代码。
- 管理
Widget引擎负责像用户提供已安装Widget应用的管理功能,用户可以通过Widget引擎查看当前运行的Widget运行状态,占用的系统资源,终止应用,运行应用以及删除应用。
- 升级
Widget引擎会根据Widget的配置文件定期的检测Widget的版本,并且动态的更新Widget应用。
- 验证
出于安全性的考虑,Widget应用都需要进行签名,并且需要显示的声明其需要使用的特殊功能接口。并且在运行时刻,Widget引擎需要对Widget调用受限接口的合法性进行验证。
Widget引擎与浏览器的关系
由于Web Widget应用采用DHTML、JAVASCRIPT和CSS技术实现,因此运行Widget需要浏览器引擎作为支持。但是通常的浏览器引擎不足以支撑Widget的应用。比如:Widget规范中严格的定义了Widget的打包方式,尤其固有的配置和部署方式,通常的浏览器引擎是无法识别并且按照规范要求正确安装和部署的。某些Widget规范中定义了Widget应用对设备能力的访问,这也是通常浏览器引擎所不支持的。因此,如果浏览器需要支持某个特定Widget规范需要对浏览器引擎进行扩展,对Widget规范中定义的打包发布、升级安装、安全验证以及设备相关的API进行扩展和支持。
这里还有一类Widget不需要访问设备功能,并且并不遵循某套特定的Widget规范,而只是以Web页面中的一个小控件或者小程序形式出现,该Widget应用是不需要对浏览器做扩展。但由于没有一套标准统一的规范标准作为支持,因此只能由该站点开发者自己去设计并且开发,不具有广泛性。
Widget引擎框架设计
这里的Widget引擎框架主要是以Android平台上的Widget引擎的设计为基础,所支持的标准不限(可包括W3C,BONDI,JIL规范)。
Widget引擎框架

- Widgets
如上图所示,Widget表示该Widget引擎所支持的各种Widget应用,该应用采用DHTML, JAVASCRIPT, CSS技术编写和实现。该Widget引擎所支持的Widget种类完全依赖于APIs Implement部分。
- Widget Module Loader
模块载入器的主要作用有两个:第一,负责各个已实现的Widget规范API模块的初始化。第二,负责在浏览器DOM树中注册载入的API模块对象,以使得Widget应用中可以使用相应的接口、对象和属性。
- Application Management
应用程序管理模块负责Widget应用的生命周期管理、应用程序的下载安装,以及应用程序的删除。应用程序管理模块与Widget DOM对象有紧密联系。比如:Widget应用在初始化阶段为resume事件注册了回调函数,在该函数中会对暂停时的应用数据进行恢复操作。应用程序管理模块在接收到Widget的恢复事件时,有责任调用该应用注册的resume回调函数,并且执行其定义的恢复操作。
- Security Management
安全管理模块负责Widget应用的安全验证。比如在Widget应用安装时,安全管理模块需要对Widget应用签名的合法性进行验证,并且对Widget声明的设备接口使用权限进行验证。当Widget运行时,Widget应用访问某个设备接口(比如Camera),安全管理模块需要对该应用是否有权访问该设备接口进行验证。
- APIs Implement
API实现包含了各个Widget引擎需要支持的Widget规范的底层实现。该部分的实现可以是纯JAVA实现、可以是JAVASCRIPT和JAVA混合实现、可以是JAVA和C/C++混合实现、亦可以是纯C/C++实现。
Widget引擎实现方式
基于WebKit引擎的扩展实现
该实现方式直接修改和扩展WebKit引擎,在引擎内部创建widget的DOM对象,并且提供抽象的调用方法。除此之外,需要在WebKit引擎中实现对各个规范模块的调用机制。
- 基于JAVA语言的模块调用
该实现方式需要对WebKit引擎实现JAVASCRIPT语言和JAVA语言之间的平滑调用机制。即Widget应用访问widget对象的某个API接口时,WebKit引擎需要将该SCRIPING对象动态的转换成相应的JAVA对象,并且调用其相应的方法。并且,将该JAVA方法执行后的结果动态的转换成JAVASCRIPT对象,并且返回给Widget应用。
采用该机制实现的API模块均用可采用JAVA语言来实现。因此,该实现方式具有实现速度快的特点,但是也正因为与JAVA语言的紧密关系移植性不好。
- 基于C/C++语言的模块调用
所有的API模块的扩展均采用C/C++语言来实现,这类似gears的实现方式。引擎内幕会将Widget应用使用的JAVASCRIPT方法动态转换成定义的C/C++对象,并且执行相应的方法。而后将返回结果转换成JAVASCRIPT方法返回给Widget对象。
采用该机制实现的API模块均采用C/C++语言来实现,因此开发周期相对较长,但是具有良好的移植性。
采用WebKit引擎扩展实现方式,可以让浏览器引擎原生的对Widget应用进行支持,但是在每次WebKit升级时,需要对修改的代码进行合并和再发布。
基于WebKit插件的扩展实现
该实现方式基于NPAPI插件扩展技术的基础之上。将Widget的DOM对象实现包含在NPAPI插件中,当浏览器检测到该对象的访问时,动态的载入该NPAPI插件,并且将所有对Widget DOM对象的访问操作均转发给NPAPI插件来完成。
NPAI插件的实现方式如WebKit引擎扩展实现一样,也有JAVA和C/C++两种实现方式,这里不再重复。
采用该实现方式的扩展无需对WebKit引擎修改,但是需要按照NPAPI规范,实现完整的SCRIPTING插件。
基于C/S架构的扩展实现
该实现方式采用借用了C/S设计模式的思想。在Widget引擎初始化阶段会启动一个内部的服务,该服务会监听系统中某个端口。Widget引擎运行时,如果访问Widget对象的某个方法时,封装的Widget JS对象会向服务端口发送方法请求。服务端接受请求后,首先会对请求进行合法性验证和分析,然后调用相应的接口来完成实际的操作。并且将结果以异步的方式返回给封装的Widget JS对象,而由该对象通知Widget应用操作结果。
C/S架构的扩展实现也可以采用JAVA和C/C++实现方式,这里不再重复。
采用该方式实现的扩展有良好的灵活性,不同的Widget规范定义的Widget应用只需要包含相应的Widget封装JS包即可正确运行。但是由于采用C/S模式的调用方式,因此在执行效率上略低于直接调用的方式。
Browser&Widget
这部分对Browser的设计提出一个概念层面上的设计。如下图所示:

- Table Manager
负责管理浏览器中各个Table页面,每个Table页面是一个独立的Web页面或者Widget应用。
- Bookmark Manager
负责管理书签,该书签包括用户收藏的网站URL以及喜爱的RSS频道和文章信息。
- RSS Manager
负责RSS频道的订阅、RSS新闻列表、RSS频道退订
- Plugin Manager
负责管理已经安装的浏览器插件
- Notification Manager
负责事件通知管理,比如RSS新闻数据的更新通知,浏览器插件的升级通知,Widget升级通知等。
- History Manager
负责记录当前Table的运行数据,包括访问的URL历史,当前窗口大小位置信息,可用于当浏览器crash后的状态恢复操作。
- Download Manager
负责浏览器的下载管理,包括android软件的下载、安装,Widget软件的下载、安装
- Gesture Manager
负责手势操作的自定义操作管理。
- Thread Manager
为了加快浏览器的载入效率,每个Table在一个单独的线程中运行,因此对线程的运行状态需要一个统一管理机制。
- Skin Manager
负责Browser外观的管理,用户可以通过该模块动态的给系统更换皮肤和显示方式。
- Widget Manager
负责Widget引用的下载、安装、删除、以及运行时环境的支持。
From Jelly's Blog, post About Mobile Widget
Post Footer automatically generated by wp-posturl plugin for wordpress.
Calendar
站内搜索
Tags
Adobe Android Apple Awk Blog Browser Chrome Client DMG Filesystem Flash Flash10 FlashPlayer GDB GeekTools GPFS HTML5 IBM IDE iOS iPad ISO Jython Linux MacOS MIPS MIT OpenSource Programming Programming Language script shell Sikuli Software Steve Jobs TextMate Tips WebKit WebOS Wordpress 乔布斯 云计算 多媒体 操作系统 浏览器Pages
-
Recent Posts
Categories
- Android (4)
- Apple (20)
- iPad (1)
- Programming (2)
- Tips (4)
- Linux (5)
- Shell (4)
- OpenSource (1)
- Filesystem (1)
- Software (7)
- Toy (2)
- Uncategorized (2)
- Widget (1)
- 互联网 (11)
- 杂七杂八 (2)
- 软件架构 (9)
- WebKit (7)
Archives
- September 2011 (1)
- December 2010 (2)
- November 2010 (4)
- July 2010 (1)
- May 2010 (14)
- April 2010 (26)
Apple
Blogroll
Project
镜像站点
Recent Comments
- atmocaRicab on WebCore::Node Dump
- talking1239 on About Mobile Widget
- talking1239 on About Mobile Widget
- justin on WebKit – WebKit Major Objects
- bob shenzhen on Mac OS下使用快捷键控制重启、注销和睡眠
写的不错,再加上webkit逐步的原生支持html5,widget这种模式是一个很好的发展方向。
加上webkit逐步原生的对html5的支持,widget这种模式是一个发展方向,