About admin

  • Website: or email
  • Biography:

Posts by admin:

2

About Mobile Widget

Posted by admin on September 12, 2011 in Android, WebKit, Widget, 软件架构 |

Widget与移动设备

Widget是什么

Widget是一个广泛的概念,从其字面意思可以翻译成小物件,小工具,小软件。Widget的实现可以多种多样,但是都有一个共同特性,即可以源码复用。换句话说,Widget软件只要开发一次,便可以在具有该Widget运行引擎平台下完美的运行,具有完全一样的功能,UI风格和用户体验方式。

从Widget的实现方式上来说主要有两种,一种是基于DHTML, JAVASCRIPT和CSS技术的Widget。另一种是基于Adobe Flash技术的Widget。目前大多数Widget实现还是基于前者,尤其是目前日渐流行的移动设备上的Widget技术均指Web Widget。

Widget的特点

  1. 小尺寸:Widget的尺寸通常都不大,并且运行速度比较快,占用的系统资源也较少。
  2. 形式多样:Widget的展现方式可以多种多样,可以是一个悬浮在窗口里的小图标,可以是占用全屏的全屏应用,也可以是插入某个应用子窗口中的小程序。
  3. 功能多样:Widget应用可以提供的功能可以多种多样(依赖Widget引擎提供的功能),如提供新闻资讯阅读,视频观看,系统状态监视,天气预报,股票信息,时钟,联系人管理,短信接收发送等。
  4. 美观:Widget应用设计的一般都比较漂亮,并且具有很好的用户体验和操作方式。
  5. 个性化强:由于Widget的小尺寸和多样的形式和功能,因此用户可以随意的安装、摆放和设置Widget,达到个性化的Widget展示和使用效果。
  6. 开发方便:由于大多数Widget都是基于Web技术或者Flash技术,并且这两种技术都已经发展成熟,提供大量的集成开发环境以及可以复用的代码。因此,开发人员可以很快速的开发出功能强大、界面美观的Widget应用。

Widget应用

  1. 桌面电脑上的Widget
  • Yahoo Widget
  • Mac OS dashbord
  • Windows Vista侧边栏
  • Windows 7桌面小工具
  1. 移动终端上的Widget
  2. 个性化首页中的Widget
  • Netvibes
  • iGoogle
  1. 博客中的Widget

移动平台上的Widget规范(Web Widget)

目前,移动平台上支持的Widget运行环境主要遵循三套规范:W3C Widget规范、BONDI Widget规范和JIL Widget规范。

  1. W3C Widget规范

该规范是由W3C组织制定,包含6个子规范,主要定义了Widget的运行时状态,打包和配置,数字签名,自动升级,以及核心API和事件处理。

  1. BONDI Widget规范

该规范由OMTP组织制定,对W3C Widget规范进行了扩充。严格定义了Widget的安全验证体系,丰富了API接口。目前W3C组织考虑将BONDI规范纳入到标准中。

  1. JIL Widget规范

该规范是由中国移动、沃达丰、软银以及Verizon共同提出和定义的Widget规范。该规范目前主要是被中国移动的BEA平台所支持。

Widget引擎

Widget引擎的作用

Widget引擎为安装、运行、管理、升级,验证Widget应用提供了一整套完整的框架体系。

  1. 安装

Widget的发布方式可以多种多样,可以是基于Web页面的发布方式也可以是基于安装包的发布方式,因此Widget引擎需要对各种发布方式兼容,将用户的Widget应用安装和部署到当前的Widget运行环境中。

  1. 运行

Widget应用有其自身的生命周期(初始化,运行,暂停,恢复,终止),因此Widget引擎有责任管理每个Widget应用的生命周期,在Widget不同的阶段执行Widget内部定义的事件处理代码。

  1. 管理

Widget引擎负责像用户提供已安装Widget应用的管理功能,用户可以通过Widget引擎查看当前运行的Widget运行状态,占用的系统资源,终止应用,运行应用以及删除应用。

  1. 升级

Widget引擎会根据Widget的配置文件定期的检测Widget的版本,并且动态的更新Widget应用。

  1. 验证

出于安全性的考虑,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引擎框架

NewImage

  1. Widgets

如上图所示,Widget表示该Widget引擎所支持的各种Widget应用,该应用采用DHTML, JAVASCRIPT, CSS技术编写和实现。该Widget引擎所支持的Widget种类完全依赖于APIs Implement部分。

  1. Widget Module Loader

模块载入器的主要作用有两个:第一,负责各个已实现的Widget规范API模块的初始化。第二,负责在浏览器DOM树中注册载入的API模块对象,以使得Widget应用中可以使用相应的接口、对象和属性。

  1. Application Management

应用程序管理模块负责Widget应用的生命周期管理、应用程序的下载安装,以及应用程序的删除。应用程序管理模块与Widget DOM对象有紧密联系。比如:Widget应用在初始化阶段为resume事件注册了回调函数,在该函数中会对暂停时的应用数据进行恢复操作。应用程序管理模块在接收到Widget的恢复事件时,有责任调用该应用注册的resume回调函数,并且执行其定义的恢复操作。

  1. Security Management

安全管理模块负责Widget应用的安全验证。比如在Widget应用安装时,安全管理模块需要对Widget应用签名的合法性进行验证,并且对Widget声明的设备接口使用权限进行验证。当Widget运行时,Widget应用访问某个设备接口(比如Camera),安全管理模块需要对该应用是否有权访问该设备接口进行验证。

  1. APIs Implement

API实现包含了各个Widget引擎需要支持的Widget规范的底层实现。该部分的实现可以是纯JAVA实现、可以是JAVASCRIPT和JAVA混合实现、可以是JAVA和C/C++混合实现、亦可以是纯C/C++实现。

Widget引擎实现方式

基于WebKit引擎的扩展实现

该实现方式直接修改和扩展WebKit引擎,在引擎内部创建widget的DOM对象,并且提供抽象的调用方法。除此之外,需要在WebKit引擎中实现对各个规范模块的调用机制。

  1. 基于JAVA语言的模块调用

该实现方式需要对WebKit引擎实现JAVASCRIPT语言和JAVA语言之间的平滑调用机制。即Widget应用访问widget对象的某个API接口时,WebKit引擎需要将该SCRIPING对象动态的转换成相应的JAVA对象,并且调用其相应的方法。并且,将该JAVA方法执行后的结果动态的转换成JAVASCRIPT对象,并且返回给Widget应用。

采用该机制实现的API模块均用可采用JAVA语言来实现。因此,该实现方式具有实现速度快的特点,但是也正因为与JAVA语言的紧密关系移植性不好。

  1. 基于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的设计提出一个概念层面上的设计。如下图所示:


NewImage
  1. Table Manager

负责管理浏览器中各个Table页面,每个Table页面是一个独立的Web页面或者Widget应用。

  1. Bookmark Manager

负责管理书签,该书签包括用户收藏的网站URL以及喜爱的RSS频道和文章信息。

  1. RSS Manager

负责RSS频道的订阅、RSS新闻列表、RSS频道退订

  1. Plugin Manager

负责管理已经安装的浏览器插件

  1. Notification Manager

负责事件通知管理,比如RSS新闻数据的更新通知,浏览器插件的升级通知,Widget升级通知等。

  1. History Manager

负责记录当前Table的运行数据,包括访问的URL历史,当前窗口大小位置信息,可用于当浏览器crash后的状态恢复操作。

  1. Download Manager

负责浏览器的下载管理,包括android软件的下载、安装,Widget软件的下载、安装

  1. Gesture Manager

负责手势操作的自定义操作管理。

  1. Thread Manager

为了加快浏览器的载入效率,每个Table在一个单独的线程中运行,因此对线程的运行状态需要一个统一管理机制。

  1. Skin Manager

负责Browser外观的管理,用户可以通过该模块动态的给系统更换皮肤和显示方式。

  1. Widget Manager

负责Widget引用的下载、安装、删除、以及运行时环境的支持。


Tags: , , , ,

1

[Toy] 获取土豆FLV下载地址的小工具

Posted by admin on December 8, 2010 in Toy |

一个获取土豆FLV下载地址的小工具,使用方法也比较简单: 前提条件,你必须安装了JAVA JRE 1.5以上的运行环境 1. 访问欲下载的土豆视频连接 2. 点击视频下方的转帖到博客或BBS 3. 拷贝FLASH代码的连接(例如:http://www.tudou.com/l/9Uby2NgANWI) 4. 运行下面的命令 java -jar FLVParser.jar -t http://www.tudou.com/l/9Uby2NgANWI 得到如下下载连接: http://124.232.157.18/f4v/65/65364165.h264_1.f4v?80000&key=a7111b24f706743495ab584cff1934fe94f5d5&playtype=1&tk=476898256&brt=2&id=tudou&itemid=38111542&fi=65364165&sz=243731218 http://180.137.254.12/f4v/65/65364165.h264_1.f4v?80000&key=a7111b24f706743495ab584cff1934fe94f5d5&playtype=1&tk=476898256&brt=2&id=tudou&itemid=38111542&fi=65364165&sz=243731218 5. 使用你喜爱的下载工具下载FLV视频即可 下载地址

0

[Toy] 一个将指定URL的页面数据保存成图片的小工具

Posted by admin on December 8, 2010 in Toy |

这个小工具功能比较简单,将指定的URL的页面的DOM元素保存成图片文件。 —————————————————————————– Usage: WebPageCapture –url=http://www.example.org/ –out=localfile.png —————————————————————————– –help Print this help page and exit –url= The URL to capture (http:…|file:…|…) –out= The target file (.png|bmp|jpeg|emf|…) –html= Output HTML file –class= Mark specified class name element –bg= Background image path –id= Mark specified id element —————————————————————————– http://www.jjos.org – (c) 2010 Jiang Jiang – 下载 下面附上一张抓去取的新浪网首页图片

构建XCode免证书开发环境

Posted by admin on November 27, 2010 in Apple |

写在最前面 如果你和我一样,是一名爱好iOS开发的开发者,并且又舍不得花费99美金去购买一个合法的开发License,这篇博客则非常适合你。如果,您是一位已经获得Apple开发者证书的开发者,则可以完全无视该篇Blog。 开篇 在没有证书的情况下,开发iOS应用程序只能在功能有限的模拟器环境中运行你的应用程序(x86环境)。对于那些与硬件平台关系不大的iOS应用程序开发来说,模拟器环境可以模拟大多数功能,但是一旦你的应用需要涉及实际的硬件设备(比如:摄像头,感应器等),则模拟器就无法满足您的开发需求。拜股沟大神所赐,网路上已经早已有开发者用自签名证书的方式,绕开XCode的证书检查,可以将XCode编译的应用程序部署到实际的iOS设备上进行测试和调试。 生成自签名开发证书 1. 启动证书链管理工具(应用程序->实用工具->钥匙串访问)创建证书 设置证书名称设置为iPhone Developer(该名称需要和XCode编译签名时使用的证书名称一致,下文会提到),身份类型选择自签名根证书,证书类型选择S/MIME (电子邮件),并且在覆盖这些默认值选项上打勾。 选择继续制作自签名证书 设置证书有效期365天(时长不要超过365天) 输入用户信息 选择密钥大小和算法(2048位和采用RSA算法) 设置密钥扩展功能(选择签名功能和代码签名功能) 禁止基本约束扩展 设置主题设备用名称扩展,RFC822输入邮箱即可 设置钥匙串类型为登陆类型 至此,自签名证书创建完毕 Hacking XCode 1. 绕开XCode证书检测(以下代码在终端执行) #!/bin/bash cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOS\ Build\ System\ Support.xcplugin/Contents/MacOS/ dd if=iPhoneOS\ Build\ System\ Support of=working bs=500 count=255 printf “\x8f\x2a\x00\x00″ >> working dd if=iPhoneOS\ Build\ System\ Support of=working bs=1 skip=127504 seek=127504 /bin/mv -n iPhoneOS\ Build\ System\ [...]

Tags: , ,

0

青春如同奔流的江河,而生活像一把无情刻刀

Posted by admin on November 17, 2010 in Uncategorized |

不想多说什么,一切都在短片中。。。 那是我日夜思念深深爱着的人呐 到底我该如何表达 她会接受我吗 也许永远都不会跟他说出那句话 注定我要浪迹天涯 怎么能有牵挂 梦想总是遥不可及 是不是应该放弃 花开花落又是雨季 春天啊你在哪里 青春如同奔流的江河 一去不回来不及道别 只剩下麻木的我没有了当年的热血 看那漫天飘零的花朵 在最美丽的时刻凋谢 有谁会记得 这世界她来过 转眼过去多年时间多少离合悲欢 曾经志在四方少年羡慕南飞的燕 各自奔前程的身影匆匆渐行渐远 未来在哪里平凡啊谁给我答案 那时陪伴我的人啊 你们如今在何方 我曾经爱过的人啊 现在是什么模样 当初的愿望实现了吗 事到如今只好祭奠吗 任岁月风干理想 再也找不回真的我 抬头仰望着满天星河 那时候陪伴我的那颗 这里的故事 你是否还记得 生活像一把无情刻刀 改变了我们模样 未曾绽放就要枯萎吗 我有过梦想 青春如同奔流的江河 一去不回来不及道别 只剩下麻木的我没有了当年的热血 看那漫天飘零的花朵 在最美丽的时刻凋谢 有谁会记得这世界她曾经来过 当初的愿望实现了吗 事到如今只好祭奠吗 任岁月风干理想 再也找不回真的我 抬头仰望着满天星河 那时候陪伴我的那颗 这里的故事你是否还记得 如果有明天 祝福你亲爱的

0

Tomorrow is just another day

Posted by admin on November 16, 2010 in Apple |

刚刷新苹果的官方主页,发现下面一张页面,难道明日苹果ios 4.2即将发布么?期待中…

Tags:

0

iPad把玩-初体验

Posted by admin on November 2, 2010 in iPad |

从老乔手握iPad出现在Apple新品发布大会的那一刻起,iPad华丽的外观、强大的功能以及App store上数以千计的高质量应用就深深的吸引了我。在我毫无意识的情况下,又一次被拉入到老乔的“陷阱“中。经过半年时间的关注,最终还是决定入手一只iPad。 从iPad发布之初公布的尺寸大小(242.8×189.7×13.4mm)以及相关的视频上看,iPad的尺寸是相当薄的。但是一直只是一个概念性的认识,直到第一次拿到iPad真机后,才惊叹Apple竟然可以在不影响功能、效率的基础上将iPad作的如此只薄,真的不得不佩服Apple的工艺水平。下面从拿到iPad后把玩的过程,来介绍一下这个新增神器。 iPad配备了9.7英寸大小的电阻式多点触摸显示屏,由于其运行的系统和iPhone/iTouch一样,并且其外观类似,因此之前很多网上评论文章都将其比为打好iPhone/iTouch。但是,在实际的把玩过程中发现,iPad的大屏幕的用户体验感受是iPhone/iTouch的小屏幕无法比拟的。比如,在iPhone/iTouch上打开一张页面,要想导航到目标区域可能需要做多次的放大,移动等滑动操作。而在iPad上的体验确大为不同,由于其9.7寸屏的优势,可以让整个网页内容尽收眼底,并且不需要做很很多(甚至压根不需要)滑动操作即可浏览到想要的信息。处理器方面,iPad采用了自家设计研发的A4 SoC处理器,主频是1GHz。电池采用25Whr的俚电,按照老乔的介绍,该电池可让iPad续航10个小时,但是按照我实际的使用时间来计算,一共使用了16.5小时后,系统剩余电量还有25%。在这个过程中主要是进行iTunes同步,网页浏览,QQ,邮件,RSS,越狱等操作,这让我对iPad的续航能力非常满意。Flash容量有16G,32G和64G三种规格。内存大小是256MB。由于我没有做实际的称量,按照前人的评测说,整体重量0.73公斤。虽然感觉很轻便,但是在实际的使用过程中发现,长时间的手握iPad会感觉   1. 安装iTunes和注册iTunes美国免费帐号 拿到iPad后的第一件事情是安装iTunes,然后注册一个美国的iTunes帐号。关于如何注册美国免信用卡帐号的方法网络上有很多介绍,这里不做详细说明,可以参考weiphone网的这篇注册介绍文章: http://bbs.weiphone.com/read-htm-tid-205881.html 2. 同步和备份iPad 当iTunes安装完毕后,使用刚才注册的美国帐号登录App Store,后将数据线插入iPad,这时iTunes会自动弹出检测到iPad的对话框,并且提示用户输入该iPad的名称。点击确认后,就可以在iTunes中看到iPad的当前名称,序列号以及系统的版本号。这时,右键点击iTunes左边栏的iPad图标,选择备份,即可将iPad中的数据备份到PC端。 3. 获取和保存SHSH 获取SHSH的工具,当然是传说中的umbrella,备份的过程全图形化操作,很简单。可以参看下面这篇文章: http://ifan.178.com/thread-690979-1-1.html 4. 越狱 并不是说不越狱iPad不能使用,App Store上为iPhone/iPad/iTouch提供了很多免费的应用供下载。但是一些主流、优秀、功能强劲的Apple应用往往是需要出血的。而且,在没有越狱的情况下,一些辅助性的神器(backgrounder,activator等)都是无法使用的。因而,对于我个人来说越狱是必须的,可以让我更好的体验iPad上强大的应用程序以及功能。 我的iPad运行的是iOS 3.2.2版本,通过疯狂的Google后发现,网络上提供两个越狱软件-绿蛙、绿雨,以及大量的越狱教程(在这里,不得不感谢哪些无私奉献的DXJM们)。通读完大量的越狱文章,了解了越狱的大致步骤、可能出现的问题后。先是下载了绿蛙的最新版本,然后开始了我的第一次越狱。按照网站上的教程说明,启动绿蛙后软件再等待2秒以后,会提示用户按住POWER键,关闭iPad(大概持续3秒),然后提示用户按住POWER键的同时,按下HOME键,进入到恢复模式(整个过程大概持续10秒)。最后,软件会提示用户按住HOME键不放,松开POWER键(过程大概持续15秒)。当软件的越狱按钮变为可用时,松开HOME键,然后用鼠标点击软件上的越狱按钮进行越狱。此时,iPad会显示让用户插入iTunes连接线的图标。等待大概10-15秒以后,iPad会出现白色屏幕,然后出现Console界面。最后,iPad会关机,手工按住POWER开机后,按照教程上所说,应该在第2屏中出现Cydia的图标。在我疯狂的用手翻动iPad面板后,我失望了。iPad屏幕中只有默认屏和search屏,压根没有传说中的第2屏,更别说见到神奇的Cyndia图标了。继续关机重启数回以后,现象依旧,难道是越狱失败? 没招,这次转换工具用传说中的绿毒进行第二次越狱。不得不说,绿毒的用户操作要比绿蛙简便。不说别的,由于不熟悉越狱的按键过程,在使用绿蛙的时,几次都由于没有及时按照提示按键被要求重新尝试,而这点绿毒要作的好很多。打开绿毒界面后,按照提示一路走下去,最后会弹出一个对话框说明,表示越狱成功。此时,iPad屏幕上显示一个硕大的绿色水滴图标,并且风火轮开始神转。紧接着,iPad重启了并且一直停留在要求用户插入iTunes连接线的界面。按照界面提示,插入数据线后,iTunes提示,系统进入恢复模式,要求下载3.2.2版本进行恢复。神马?难道给刷挂了?不管了,点击了下载按钮后。将iPad关机了,然后再次使用绿蛙进行越狱。整个操作和上面过程一样,但是这次不同的是,越狱之后竟然iTunes找到iPad设备了(不再提示要求下载固件并且恢复了)。虽然,是可以进入系统了,但是依旧是没有看到Cydia图标。 就这样来回用绿蛙和绿毒越狱多次后,一次关机重启后发现神奇的第2屏出现了,而且屏幕上出现了绿毒和绿蛙两个图标,并且神奇的Cydia图标也出现了。后来,我在想,之前也许也越狱成功了,但是由于自己越狱心切,越狱在进行中时,由于没有提示,误认为是关机或者其他操作了,然后强制重启,导致越狱失败。 越狱教程可以参看: http://ifan.178.com/thread-690450-1-1.html 5. 设置Cydia源,安装补丁 同样参看上面的越狱教程,里面有很详细的说明 最后,越狱完毕后就是疯狂的下载软件。至此,神器可以真正开始释放威力了。 ~~~ END ~~~

Tags: , ,

0

CSS 兼容一览表

Posted by admin on July 12, 2010 in CSS |

Tags: ,

2

Introduce to WebKit2

Posted by admin on May 12, 2010 in WebKit, 浏览器, 软件架构 |

WebKit2是为WebKit引擎而设计的支持单独进程模型的API层。将Web的内容(Javascript,HTML,布局等)处理与应用程序UI分离,分别运行在两个不同的进程之中。这种分离的进程模型和Google的Chrome浏览器有几分类似,不同的是WebKit2将从引擎内部原生的支持这种多进程机制。通过将内容和展现相分离的方式,可以更加有效的提高浏览器的运行效率。 WebKit2提供了一套基于C语言的非阻塞API接口,为了实现WebKit2引擎中对这些API接口的非阻塞调用,WebKit2在设计的时候采用了以下几个方面的技术: 以通知的方式回调客户端函数(比如,didFinishLoadForFrame),通过这种机制可以告知client发生了什么事情(目前WebKit版本中也大量的使用了该技术,用来通知client事件的发生) 以策略方式回调客户端函数(比如,decidePolicyForNavigationAction),当引擎执行某一项操作时,通过该机制由实现具体功能的client来决定是否该操作被执行。 策略设置(例如WKContextSEtCacheModel, WKContextSetPopupPolicy),该机制允许client重新定义策略,而不需要再通过回调的方式访问UIProcess。 代码注入(例如,WebBundle),当所有其他的方法都无法完成时,可以通过代码注入的方式将代码载入到WebProcess中。不过按照WebKit官方文档所说,这个功能目前只是在计划中,还没有真正的在代码级实现。 WebKit的多进程架构 下图是之前webkit的进程架构图 从上图可以看到,之前的WebKit的ui进程和webkit内核进程都是运行在相同的进程空间。其中API Boundary表示和系统相关的api层,应用层使用webkit api使用webkit引擎,并且引擎使用该api访问系统资源。 接着,再看看新版的webkit2引擎的架构 从上图可以看到,webkit2将webkit引擎分成了2个部分,一个部分是和ui相关的操作,运行在一个进程中。而另外的webkit部分运行在独立的进程中。通过多进程机制的支持,增加了ui响应和引擎布的效率,同时也增强了系统的健壮性和安全性。 之前也提到,webkit2的多进程模型有点类似chrome的多进程模型,但是有一些不同之处,下图是chrome的进程模型: 从上图可以看到api bondary是在render进程的下方,也就是说ui绘制进程是在webkit框架之上扩展支持的。该部分的扩展是非webkit原生支持的,属于chromium代码的一部分,这导致无法在其他平台或者框架中支持多进程功能。 为了支持多进程的机制,在webkit中增加了两个新的子系统: CoreIPC:为消息传递和事件处理提供支持。 DrawingArea:为交叉绘制区域提供了抽象。通过共享内存位图信息的方式,为多个进程绘制提供了支持。 目前,我只在Mac OS 10.6.3平台上编译并且体验了Webkit2,可以使用下面的方法加入多进程支持: WebKitTools/Scripts/build-webkit –webkit2 ~~~ END ~~~

Tags:

1

Titanium 架构分析

Posted by admin on May 12, 2010 in 软件架构 |

一、分析的目标 了解Titanium产品的基本框架结构和特点 了解Titanium产品如何扩展本地API以及访问方式 了解Titanium产品中的动态语言之间如何相互调用 二、Titanium概述 2. 1 Titanium介绍 Titanium是一个Web应用程序运行环境,它支持不同的系统平台(Windows、Linux、Mac),并且支持Web应用程序对本地APIs的访问。在基于Titanium平台上,用户可以快速开发和方便的部署应用程序,并且这些应用程序可以使用本地APIs实现许多普通Web应用程序无法完成的功能和特性。 2.2 Titanium特点 Titanium框架具有如下几个方面的特点: 支持多平台(Linux、Mac、Windows、移动设备) 使用Web技术加快软件开发速度 支持Web中内嵌多种编程语言 支持对本地APIs的访问 通过Appcelerator网络云服务,基于Titanium的应用可以更容易的打包、测试和部署 本地功能的模块化,可动态加载指定的功能模块 强大灵活的语言扩展,用户在Titanium框架中可以很方便的扩展多种动态语言 2.3 Titanium 框架结构 上图来自于Appcelerator官网,该图以iPhone和Android两个移动平台为例,描述了Titanium的总体框架结构。在Titanium框架中,Web应用程序可以很方便的访问设备UI组件。比如,可以在页面中使用Titanium提供的API控制导航条、工具栏、菜单,以及可以动态的向用户弹出对话框、警告框等。除此,之外Titanium API还支持本地功能模块的访问,即用户可以使用Titanium提供的APIs接口访问数据库、定位功能、文件系统功能、网络功能、媒体功能等。 不过该框架图,并没有将Titanium中对多种脚本语言的相互访问机制很好的表现出来。但是,这一机制却又是Titanium框架的一个比较重要的功能特性。 三、Titanium构建 Titanium的构建过程使用scons管理(http://www.scons.org/)。scons是一个开源的软件构建工具,使用Python语言来描述软件构建规则。通过Titanium的源码级构建和Titanium的构建规则两个方面,可以了解Titanium运行环境由那些部分组成、这些模块和模块之间的关系是什么。 [注]以下所有的测试和分析内容均是以Linux平台上Desktop版本的Titanium代码为基础。 构建Titanium所依赖的库和环境 Ruby 1.8.x 开发包 Python 2.5.x开发包 scons构建工具 git 版本管理工具 Ubuntu 9.04上构建Titanium所需的支持包 sudo apt-get install build-essential ruby rubygems libzip-ruby \ scons libxml2-dev libgtk2.0-dev python-dev ruby-dev \ libdbus-glib-1-dev libnotify-dev libgstreamer0.10-dev \ libxss-dev [...]

Tags:

Copyright © 2010-2012 Jelly's Blog All rights reserved.
This site is using the Desk Mess Mirrored theme, v2.0.2, from BuyNowShop.com.

Jelly's Blocnzz&51la for wordpress,cnzz for wordpress,51la for wordpress