Ted Patrick > { Events & Community } > Adobe Systems


Flex Instantiation Life Cycle and Event Flow

Flex is an event driven programming model, everything (and I mean everything) happens due to an event. When developers first take a look at MXML it is often difficult to see the event flow or instantiation life cycle of an application given the XML markup. This is especially confusing to HTML and Flash developers because the development paradigm of Flex does not match what they are used to. HTML instantiates top to bottom where Flash executes across frames starting at Frame0. Flex is a bit different.

When I learned Flex, I struggled with understanding event flow and instantiation in MXML. I was puzzled because I really didn't understand what event would kick start the logic or when events would fire. The key is understanding the event basics and seeing the initialization and event flow for yourself.

So lets look at a simple application in MXML.

Sample Application

Sample Application Source



When this application runs it dumps the instantiation and event flow into the TextArea via a binding. This allows us to see all events within the application occur independent of component instantiation order. As you can see in the application output there is a consistent order of events when this application starts. Here is the basic output up to the applicationComplete event. (The EventFlow0 object is the Application tag of the base app. The times to the left are the from the execution clock of the Flash Player.)

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


Once the applicationComplete event it triggered, the components fire events when mouseEvents are dispatched to the components individually.

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!


There is also some great documentation on the instantiation life cycle located here. Understanding this instantiation process is very important for Flex development. The example posted contains view source so feel free to take a peek and play with the events yourself.

So now you know the instantiation life cycle and event flow! I will be covering DOM events and event flow next. Event do not just happen at the component but they flow across the displaylist in phases.

Let the capture and bubbling phases begin!

Cheers,

Ted :)

6 Responses to “ Flex Instantiation Life Cycle and Event Flow ”

  1. # Anonymous Marcus

    Morning Ted.

    Yep. You're definitely right. Understanding what events are firing when is one of the keys to taming Flex. Great explanation.
    I posted about the event sequence during a state change a while back. Thought it might be relevant to this discussion.
    Keep up the great posts.

    Have a great one.  

  2. # Blogger Ayal

    Ted -

    What's the best way to start learning Flex? book? web site? resource?  

  3. # Blogger Christopher

    I'm looking through this and I'm confused as to why initialize is called AFTER outTextArea/ Hello/ GoodBye and Clear buttons are initialized...  

  4. # Blogger Ted Patrick

    The events fire within children and then in the parent. In this case initilize happens in the child components and them moves to the application tag as the parent. This is typical of the event lifecycle as it moves from the root application to children and back to the application. It is as though the application event is the summary event of all child initialize events.

    ted :)  

  5. # Anonymous chuck

    I can't get this to compile... the line in report that assigns to outTextData errors: 1050: Cannot assign to a non-reference value.  

  6. # Anonymous chuck

    Oops haha... never mind. I just had an = instead of a + on the second line of that statement.  

Post a Comment



Jobs


Flex Jobs
city, state, zip


© 2008 Ted On Flash