浅谈Flex Framework

2009/02/17 21:45 评论 (0)

此文章是David Coletta记录360|Glex由Deepa Subramaniam讲解Flex Framework。笔者简单地翻译了他的文章。希望能深入迁出的道出Flex Framework的精髓。

Deepa Subramaniam:
我们可以把Flex Framework看成一整套专门给各位Flex开发者的基础函数库,以后会不断的扩充,然而我们想表达:此框架不是要做出世界上所有的UI元件让你用; 而是一个"容易扩充"的元件,使开发者容易建立属于自己的元件。

Display List

Flash player用来放上所有可视物件的地方就是Display List。整个List是树状结构,树的根节点就是我们的Application,通过调用addChild, removeChild来操作Display List,而SystemManager是可以取得字体、样式等属性的物件。

SystemManager

Flex Framework下,第一个实例化的物件,它最重要的人物是建立Application并添加到Display List上,Flex SWF是一个只有2个frame的文件,第一个frame用来实例化SystemManager,并让Flash Player停在第一个frame,第一个frame包含了: SystemManager、preloader等;第二个frame是你的所有程序代码。SystemManager实例化Application组件,并把Application.systemManager指向自己,接下来,Application开始把所有的子物件建立出来,建立完成后,发出CREATION_COMPLETE事件,最后,全部完成发出APPLICATION_COMPLETE事件。
另外PopUp组件、ToolTip、Cursor组件也是由SystemManager管理。

FocusManager

管理元件(不是player)对键盘、鼠标动作的回应,一个app可以有多个FocusManager组件,因此可以有多个Tab Loop(就是按tab键遍历每个UI元件),本来player内建focus管理机制,Flex Framework重现了很多一遍处理UI元件的focus回应。
系统工程师不用太琢磨FocusManager;组件开发工程师就需要使用IFocusManagerComponent以及UIComponent.keyDownHandler来处理Focus响应,UIComponent有一个focusEnabled属性,表示此UIComponent是否对focus做出响应,举例来说,Label的focusEnabled预设值是false。所有在mx.controls下的子类都有keyDownHandler。建立accessibility的程序时,一定要实例化以上的Interface,然后使用flash player预设的API:flash.accessibility。我们在编译swf时,为了节省文件大小,除非需要,否则不会编译accessibility进去。

Automate Framework(mx.automation)

所有的Flex组件都有实例化的automation interface,系统所有的组件都得加上ID; 要删除不使用的UI容器调用 showInAutomationHierarchy = false就可以。
Moxie(Flex 3)支持"深链接"(Deep Linking),使用者操作系统时,url会因为使用的部分不同而改变(以前URL都是固定的),如同html页面的味道,简单来说,即Flex2 HistoryManager的进化版,不但url会改变,也支持浏览器的前后按钮。我们叫它:BrowserManager。

加速程序效能

尽量避免调用setStyle(),这事最消耗资源的动作,因为Display List上所有组件都需要重读样式。如果不得不使用,在INITIALIZE事件上使用,别在CREATION_COMPLETE事件后调用。避免建立巢状容器,使用Canvas坐标特性(Canvas上的所有元件坐标都是绝对坐标,不能动态改变),可以减少对系统元件的重新计算。

让特效顺畅

适当地家常特效播放的时间长度。场景上组件越少,特效播放越顺畅,避免使用点阵图背景,加上Effect.suspendBackgroundProcessing = true 也可以再EVENT_START EVENT_END事件里把背景图隐藏起来,让player省下绘制UI的效能。

Framework的存取修饰词

public, private, protected, mx_internal当我们浏览flex原代码时,我们认为你会把会用到的组件标示为public,保留起来的属性表示为protected,不需要用到的属性标示为private。那mx_internal通常指,未来我们会改变的部分,可能会有bug,如果你发现了,请告诉我们:Adobe open bug base

你也可以看看Flex开发工程师的博客:

prof.syd.xu | 类别: 找事儿 | 阅读(1435)

Ta ma'de supperman! Feed

Be sure to subscribe to The Ta ma'de supperman! Feed.

Ta ma'de supperman!

Contact Me

Where I am