`
keren
  • 浏览: 1585930 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Flex 应用的初始化顺序

    博客分类:
  • Flex
阅读更多
http://flfxair.com/?p=39
preloader->systemManager->FlexApplication started…
然后才是

preinitialize
在所有的初始化之前触发,没有子组件的定义,但是可以引用组件的变量.

initialize
当所有子组件生成完成后触发,在这个时间点还没有组件被渲染出来.

creationComplete
组件定义完成并已经在显示列表.

applicationComplete
所有的组件初始化完成并显示.


首 先介绍一下SystemManager. SystemManager是Flex应用的主控者, 它控制着应用窗口, Application实例, 弹出窗口, cursors, 并管理着ApplicationDomain中的类. SystemManager是FlashPlayer实例化的第一个类, 它存储了主应用窗口的大小和位置信息, 保存其子组件比如:浮动弹出窗口和模态窗口的痕迹. 通过SystemManager可以获得内嵌字体,样式和document对象.
自定义的可视化组件(UIComponent的子类)只有在调用过addChild()后, 才会有一个SystemManager赋给他们, 之前是Null. 所以在自定义可视化组件的构造函数中不要使用SystemManager.

通常, Application对象创建时, 发生如下事件:
1. 实例化Application对象
2. 初始化Application.systemManager
3. Application在初始化过程之前, 派发预初始化事件.
4. 调用createChild(). 此时, 所有应用组件被创建, 所有组件的createChild()被调用.
5. Application派发初始化事件, 表明所有的组件初始化完毕.
6. 派发creationComplete事件
7. Application对象添加到显示列表中
8. 派发applicationComplete事件

大 多数情况下, 我们使用<mx:Application>来创建application对象, 但如果使用ActionScript来创建的话, 那么建议不要在application的构造函数中创建组件, 推荐在crateChildren函数中, 主要是从性能方面考虑.

Flash包含的是一个时间线上的多个帧, 而Flex的SWF只包含2个帧. SystemManager, Preloader, DownloadProgressBar和少量工具类都在第一帧, 剩下的包括应用代码/ 内嵌资源全都在第二帧中. 当Flash Player下载下载SWF时, 只要接收到第一帧内足够的数据, 就会实例化SystemManager, 由它来创建Preloader, 然后创建DownloadProgressBar, 这两个对象会察看剩余字节的传输过程. 当第一帧的所有字节传输完毕后, SystemManager发送enterFrame到第二帧, 然后是其他事件. 最后Application对象派发applicationComplete事件.

Flex 是一个事件驱动的编程模型, 任何事情的发生, 其背后必然存在一个事件. 而开发者第一次看到MXML时, 很难体会到一个Xml标记的应用的事件流和实例化的生命周期. 这个对于HTML和Flash的开发者尤其会感到困惑, 因为其熟悉的方式与Flex的一点也不相似. HTML的实例化是从上到下的, Flash的执行是从Frame0开始一帧帧运行的. 而Flex则又有不同.

从我们开始学习Flex时, 我们就需要了解事件流和MXML的实例化. 我非常困惑因为我实在难以理解什么样的事件会被触发或者事件什么时候会被触发. 关键是要理解事件的基础并亲自观察事件流的初始化.

我们来看一个简单的MXML的应用.

<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application
    xmlns:mx=”http://www.adobe.com/2006/mxml”
    layout=”absolute”
    backgroundGradientColors=”[#67cbff, #fcffff]”
    color=”#000000″
    fontSize=”12″    
    preinitialize=”report( event , ‘preinitialize’ )”
    initialize=”report( event , ‘initialize’ )”
    creationComplete=”report( event , ‘creationComplete’ )”
    applicationComplete=”report( event , ‘applicationComplete’ )”
    >
    
    <mx:Script>
        <![CDATA[    
                    
            [Bindable]
            
            public var outTextData:String=”";
            
            public function report( event:Event , value:String ):void
            {
                outTextData += String( flash.utils.getTimer() ) + ‘ms >> ‘
                + event.currentTarget + ‘.’ + value + ‘\n’;    
            }
            
        ]]>
    </mx:Script>
    
    <mx:TextArea
        id=”outTextArea”
        text=”{ outTextData }”
        right=”10″ left=”10″ top=”50″ bottom=”10″ alpha=”0.5″
        wordWrap=”false”
        initialize=”report( event , ‘initialize’ )”
        creationComplete=”report( event , ‘creationComplete’ )”
        />
    
    <mx:Button
        y=”10″ height=”30″ left=”168″ width=”150″
        id=”HelloButton”
        label=”Say Hello”
        initialize=”report( event , ‘initialize’ )”
        creationComplete=”report( event , ‘creationComplete’ )”
        rollOver=”report( event , ‘rollOver’ )”
        rollOut=”report( event , ‘rollOut’ )”
        click=”report( event , ‘click > Hello!’ )”
        />
        
    <mx:Button
        id=”GoodByeButton”
        label=”Say Goodbye”
        y=”10″ left=”10″ height=”30″ width=”150″ color=”#000000″
        initialize=”report( event , ‘initialize’ )”
        creationComplete=”report( event , ‘creationComplete’ )”
        click=”report( event , ‘click > Goodbye!’ )”
        />
        
    <mx:Button
        id=”ClearButton”
        label=”Clear”
        y=”10″ left=”326″ height=”30″ color=”#000000″ right=”10″        
        initialize=”report( event , ‘initialize’ )”
        creationComplete=”report( event , ‘creationComplete’ )”
        click=”outTextData=”;report( event , ‘click’ )”
         />
    
</mx:Application>


这个应用运行时, 输出了实例流程和事件流. 这校我们就能够看到所有事件的触发顺序. 可以发现应用启动后, 事件的顺序是一定的. 下面是输出的内容:

167ms >> EventFlow0.preinitialize
183ms >> EventFlow0.outTextArea.initialize
187ms >> EventFlow0.HelloButton.initialize
188ms >> EventFlow0.GoodByeButton.initialize
189ms >> EventFlow0.ClearButton.initialize
189ms >> EventFlow0.initialize
243ms >> EventFlow0.outTextArea.creationComplete
243ms >> EventFlow0.HelloButton.creationComplete
243ms >> EventFlow0.GoodByeButton.creationComplete
244ms >> EventFlow0.ClearButton.creationComplete
244ms >> EventFlow0.creationComplete
246ms >> EventFlow0.applicationComplete

一旦applicationComplete事件触发后, 组件就会在鼠标事件派发后触发自己的事件.

1807ms >> EventFlow0.HelloButton.rollOver
2596ms >> EventFlow0.HelloButton.rollOut
2954ms >> EventFlow0.HelloButton.rollOver
3170ms >> EventFlow0.HelloButton.rollOut
3543ms >> EventFlow0.HelloButton.rollOver
4052ms >> EventFlow0.HelloButton.click > Hello!
4267ms >> EventFlow0.HelloButton.click > Hello!
4474ms >> EventFlow0.HelloButton.click > Hello!
4569ms >> EventFlow0.HelloButton.rollOut
4907ms >> EventFlow0.GoodByeButton.click > Goodbye!
5130ms >> EventFlow0.GoodByeButton.click > Goodbye!

忘记了来路,感谢源作者
分享到:
评论

相关推荐

    Flex Application 初始化顺序

    Flex Application 初始化顺序是一个重要的概念,尤其对于开发Adobe Flex应用程序的开发者来说,理解这一流程能帮助他们更好地优化代码和管理应用程序的生命周期。Flex是基于ActionScript和MXML的框架,用于构建富...

    Flex启动与初始化

    Flex 启动与初始化过程是指 Flex 应用程序从启动到显示的整个过程。在这个过程中,Flex 系统会创建一个 SystemManager 对象,该对象是应用程序的入口,负责控制 swf 的加载和启动,也负责划分 Flex 工程显示层级。 ...

    关于Flex 初始化的research

    原因在于Flex组件的生命周期,尤其是初始化阶段的事件顺序。 Flex组件的生命周期包含多个关键阶段,这些阶段按照一定的顺序执行,确保组件的正确初始化和显示。主要阶段包括: 1. **PREINITIALIZE**:这是组件生命...

    flex事件运行流程

    本文将深入探讨Flex事件运行流程,特别是与`mx:Application.applicationComplete`、`creationComplete`以及Flex应用程序初始化顺序相关的知识点。 首先,Flex应用程序的启动始于`preloader`阶段,系统管理器...

    Flex中方法调用顺序的思考

    在调试和优化Flex应用时,理解这些方法调用的顺序能够帮助我们定位问题并提升性能。例如,如果你发现某个属性没有正确更新,可能是因为它在错误的阶段被设置,或者没有调用`validateNow()`方法来立即刷新组件状态。 ...

    flex学习笔记 flex学习总结 flex学习教程

    8. **Flex应用程序生命周期**:理解Flex应用从启动到关闭的整个过程,包括初始化、布局、渲染、事件处理等阶段,有助于优化性能和解决运行时问题。 9. **Flex性能优化**:学习如何通过优化组件使用、减少网络请求、...

    FLEX 系统管理器 SystemManager

    SystemManager不仅负责控制Flex应用的基本元素,如应用窗口、Application实例、弹出窗口和光标,还负责管理ApplicationDomain中的类加载和执行。下面将详细讨论SystemManager的主要功能和工作流程。 1. **应用窗口...

    flex4原生扩展应用(Android)

    7. 定位服务集成:在Flex4应用中实现定位功能,需要处理定位请求的初始化、监听位置更新、处理定位权限问题等。开发者可以创建一个自定义ANE来封装这些操作,使得在Flex层的调用变得更加简单。 通过"说明.txt"文件...

    Flex中文帮助文档

    10. **Flex应用生命周期**:从初始化到销毁,Flex应用有明确的生命周期。理解这个过程对于优化性能和正确处理资源释放至关重要。 通过阅读和学习这个Flex中文帮助文档,初级用户将能够逐步熟悉Flex的基本概念,掌握...

    flex全书籍 flex全书籍

    7. **Flex应用生命周期**:从初始化、布局计算、绘制到事件处理,理解Flex应用的生命周期对于优化性能和解决运行时问题至关重要。 8. **Flex图表和可视化**:Flex SDK提供了丰富的图表组件,可以创建各种统计图表和...

    Flex3组件和框架的生命周期

    **Flex应用程序的初始化阶段** 初始化阶段主要负责配置应用程序的基础环境,包括加载外部资源、初始化外部接口等。这个阶段还会调用`createChildren()`方法,用于创建子组件实例。 **Flex应用程序的预加载阶段** ...

    flex3

    8. **组件生命周期**: Flex组件有自己的生命周期,包括创建、初始化、显示、隐藏和销毁等阶段。理解这个生命周期对于优化性能和解决问题至关重要。 9. **BlazeDS**: BlazeDS是Flex与Java服务器之间通信的中间件,...

    Flex实际应用源代码

    8. **状态管理**:Flex应用程序可以有多个状态,如初始化、加载、运行等。源代码可能会展示如何利用_states和_transitions来管理这些状态,实现不同状态下组件的可见性和行为变化。 9. **错误处理与调试**:源代码...

    《Flex企业应用开发实战》学习笔记之Flex企业应用开发基础[收集].pdf

    2.1 MXML语言是Flex应用开发的核心部分,它是一种XML标记语言,与ActionScript(一种面向对象的脚本语言)共同使用来构建Flex应用程序。MXML提供了丰富的可视化组件,如表格、菜单和树,以及不可视组件,如数据绑定...

    Flex解决乱码问题

    这段代码中的`initialize`属性指定了初始化事件处理器,在该处理器中设置`useCodePage`为`true`,使得Flex应用能够正确地处理Unicode编码。 #### 2. 服务器端编码设置 除了客户端的配置之外,还需要确保服务器端的...

    flex

    4. **Flex Component Lifecycle** - 组件的创建、初始化、显示和销毁的过程,理解这个生命周期对于优化性能和处理事件至关重要。 5. **Data Binding** - Flex支持数据绑定,可以自动同步UI组件和模型数据。 6. **...

    Flex问题解决大全

    每个组件的生命周期包括`preInitialize`、`initialize`和`creationComplete`三个阶段,分别在组件创建的不同阶段调用,方便开发者在相应时刻执行初始化操作。 Flex的大小和布局管理非常灵活。默认情况下,组件会...

    flex窗口最大最小化

    在前端开发中,Flex布局(Flexible Box)是一种用于创建弹性盒模型的CSS3模块,它极大地简化了网页或应用程序中的复杂布局设计。本教程将详细讲解如何使用Flex来实现窗口的拖拽、最大化、最小化以及关闭功能,这些都...

    Flex之模块化

    本主题聚焦于"Flex之模块化",这主要涉及到使用Adobe Flex框架进行模块化应用程序的设计和构建。 Flex是一个用于创建富互联网应用程序(RIA)的开源框架,它基于ActionScript编程语言和Flash Player或Adobe AIR运行...

Global site tag (gtag.js) - Google Analytics