SlideShare a Scribd company logo
1 of 44
Download to read offline
Adobe Flex 3 Component
       Lifecycle

   Presented by Ethan Du(杜增强)
Who am I ?


   Ethan Du
     – Senior Flex Architect @ 123Show
     – blog: http://www.duzengqiang.com
Flex
   What is Flex?
   • MXML
   • A set of components
   • The component lifecycle!
Flex Component Lifecycle
   What is it?
   • The way the framework interacts with
   every Flex component
   • A set of methods the framework calls to
   instantiate, control, and destroy components
Phases of the Lifecycle
   3 Main Phases:
     BIRTH:
    • construction, configuration,attachment,
    initialization
     LIFE:
    • invalidation, validation, interaction
     DEATH:
    • detachment, garbage collection
Birth
Construction
What is a constructor?
   A function called to instantiate (create in
 memory) a new instance of a class
How is a constructor invoked?

               Actionscript:
      var theLabel : Label = new Label();
                  MXML:
          <mx:Label id="theLabel"/>
What does an ActionScript3
constructor look like?
 public function ComponentName()
 {
   super();
   //blah blah blah
 }
   No required arguments (if it will be used in
 MXML); zero, or all optional
   Only one per class (no overloading!)
   No return type
   Must be public
   Call super()…or the compiler will do it for you.
What should a constructor do?
   A good place to add event listeners to the
 object.

   Not much. Since the component’s
 children have not yet been created, there’s
 not much that can be done.
Don’t create or add children in
the constructor

    It’s best to delay the cost of createChildren
  calls for added children until it’s necessary
Configuration
Configuration
   The process of assigning values to
 properties on objects
   In MXML, properties are assigned in this
 phase, before components are attached or
 initialized
 <local:SampleChild property1="value"/>
Configuration Optimization
   To avoid performance bottlenecks, make
 your setters fast and defer any real work
 until validation
   We’ll talk more about deferment in the
 validation / invalidation section
Attachment
What is attachment?
   Adding a component to the display list
 (addChild, addChildAt, MXML declaration)
Methods

  addingChild(child);

  $addChildAt(child, index);

  childAdded(child);
Must know about attachment
   The component lifecycle is stalled after
 configuration until attachment occurs.
Consider this component:
 public class A extends UIComponent
 {
           public function A() {
                              trace( "CONSTRUCTOR" );
                              super();
           }

          override protected function createChildren() : void {
                            trace( "CREATECHILDREN" );
                            super.createChildren();
          }

          override protected function measure() : void {
                            trace( "MEASURE" );
                            super.measure();
          }

          override protected function updateDisplayList(width:Number, height:Number) : void {
                            trace( "UPDATEDISPLAYLIST" );
                            super.updateDisplayList(width,height);
          }

          override protected function commitProperties():void {
                            trace( "COMMITPROPERTIES" );
                            super.commitProperties();
          }

 (It traces all of its methods.)
And this application:
 <mx:Application ...>
    <mx:Script>
     <![CDATA[
           override protected function createChildren() :
   void {
                   super.createChildren();
                   var a : A = new A();
           }
     ]]>
    </mx:Script>
 </mx:Application>
Output:
  CONSTRUCTOR




  Without attachment, the rest of the lifecycle
doesn’t happen.
But what about this application?
 <mx:Application ...>
    <mx:Script>
     <![CDATA[
           override protected function createChildren() :
   void {
                   super.createChildren();
                   var a : A = new A();
 this.addChild( a );
           }
     ]]>
    </mx:Script>
 </mx:Application>
Output:
  CONSTRUCTOR
  CREATECHILDREN
  COMMITPROPERTIES
  MEASURE
  UPDATEDISPLAYLIST


  Don’t add components to the stage
   until you need them.
Initialization
Initialization

  1. ‘preInitialize’ dispatched
  2. createChildren(); called
  3. ‘initialize’ dispatched
  4. first validation pass occurs
  5. ‘creationComplete’ dispatched – component
    is fully commited, measured, and updated.
createChildren()
   MXML uses the createChildren() method to add children to
   containers
   Override this method to add children using AS
   • Follow MXML’s creation strategy: create, configure, attach

 override protected function createChildren():void
 {
 ...
 textField = new UITextField();

 textField.enabled = enabled;
 textField.ignorePadding = true;
 textField.addEventListener("textFieldStyleChange",
           textField_textFieldStyleChangeHandler);
   ...
       ...
   addChild(DisplayObject(textField));
 }
3 Important Rules
 1. Containers must contain only UIComponents
 2. UIComponents must go inside other
   UIComponents.
 3. UIComponents can contain anything (Sprites,
   Shapes, MovieClips, Video, etc).
Life
Invalidation / Validation cycle
   Flex imposes deferred validation on the
   Flash API
   • goal: defer screen updates until all
     properties have been set
   3 main method pairs to be aware of:
     • invalidateProperties() ->
       commitProperties()
     • invalidateSize() -> measure()
     • invalidateDisplayList() ->
       updateDisplayList()
Deferment
   Deferment is the central concept to
 understand in the component Life-cycle
   Use private variables and boolean flags to
 defer setting any render-related properties until
  the proper validation method
bad example

 public function set text(value:String):void
 {
   myLabel.text = value;

 }
good example
 private var _text:String = "";
 private var textChanged:Boolean = false;
 public function set text(value:String):void
 {

     _text = value;
     textChanged = true;
     invalidateProperties();
     invalidateSize();
     invalidateDisplayList();
 }

 override protected function commitProperties():void{
 {
        if(textChanged){
              myLabel.text = _text;
              textChanged = false;
        }
        super.commitProperties();
 }
Interaction
Interaction
   Flex is an Event Driven Interaction Model.
Death
Detachment
Detachment
   “Detachment” refers to the process of
 removing a child from the display list
   These children can be re-parented
 (brought back to life) or abandoned to die
   Abandoned components don’t get
 validation calls and aren’t drawn
   If an abandoned component has no more
 active references, it *should* be garbage-
 collected
Garbage Collection
Garbage Collection
   The process by which memory is returned
 to the system
   Only objects with no remaining references
 to them will be gc’d
 • Set references to detached children to
 “null” to mark them for GC
   Consider using weak references on event
 listeners
Conclusion
   Defer, Defer, DEFER!
   Use validation methods correctly
Conclusion
   Defer, Defer, DEFER!
   Use validation methods correctly
References
   Ely Greenfield: “Building a Flex Component”
   •http://www.onflex.org/ACDS/BuildingAFlexCo
   mponent.pdf
   RJ Owen: “Flex 3 Component Life-cycle”
   •http://rjria.blogspot.com/2009/04/cf-united-
   express-denver-presentation.html
   Mrinal Wadhwa: “Flex 4 Component
   Lifecycle”
   •http://weblog.mrinalwadhwa.com/2009/06/21/
   flex-4-component-lifecycle/
QA

More Related Content

What's hot

Android programming -_pushing_the_limits
Android programming -_pushing_the_limitsAndroid programming -_pushing_the_limits
Android programming -_pushing_the_limits
Droidcon Berlin
 
Inversion Of Control
Inversion Of ControlInversion Of Control
Inversion Of Control
bhochhi
 
Automated%20testing%20with%20Espresso2.x
Automated%20testing%20with%20Espresso2.xAutomated%20testing%20with%20Espresso2.x
Automated%20testing%20with%20Espresso2.x
Tatsuya Maki
 
谷歌 Scott-lessons learned in testability
谷歌 Scott-lessons learned in testability谷歌 Scott-lessons learned in testability
谷歌 Scott-lessons learned in testability
drewz lin
 

What's hot (20)

A full introductory guide to React
A full introductory guide to ReactA full introductory guide to React
A full introductory guide to React
 
Adding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsAdding a modern twist to legacy web applications
Adding a modern twist to legacy web applications
 
ASP.NET MVC Internals
ASP.NET MVC InternalsASP.NET MVC Internals
ASP.NET MVC Internals
 
Introductionandgreetings
IntroductionandgreetingsIntroductionandgreetings
Introductionandgreetings
 
Learn react-js
Learn react-jsLearn react-js
Learn react-js
 
ReactJS presentation
ReactJS presentationReactJS presentation
ReactJS presentation
 
Android programming -_pushing_the_limits
Android programming -_pushing_the_limitsAndroid programming -_pushing_the_limits
Android programming -_pushing_the_limits
 
JSON Part 3: Asynchronous Ajax & JQuery Deferred
JSON Part 3: Asynchronous Ajax & JQuery DeferredJSON Part 3: Asynchronous Ajax & JQuery Deferred
JSON Part 3: Asynchronous Ajax & JQuery Deferred
 
React.js enlightenment
React.js enlightenmentReact.js enlightenment
React.js enlightenment
 
Riacon swiz
Riacon swizRiacon swiz
Riacon swiz
 
Inversion Of Control
Inversion Of ControlInversion Of Control
Inversion Of Control
 
Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2
 
Easy Button
Easy ButtonEasy Button
Easy Button
 
I hate mocking
I hate mockingI hate mocking
I hate mocking
 
Automated%20testing%20with%20Espresso2.x
Automated%20testing%20with%20Espresso2.xAutomated%20testing%20with%20Espresso2.x
Automated%20testing%20with%20Espresso2.x
 
Making React Native UI Components with Swift
Making React Native UI Components with SwiftMaking React Native UI Components with Swift
Making React Native UI Components with Swift
 
谷歌 Scott-lessons learned in testability
谷歌 Scott-lessons learned in testability谷歌 Scott-lessons learned in testability
谷歌 Scott-lessons learned in testability
 
Android App Development - 07 Threading
Android App Development - 07 ThreadingAndroid App Development - 07 Threading
Android App Development - 07 Threading
 
Alexey Buzdin "Maslow's Pyramid of Android Testing"
Alexey Buzdin "Maslow's Pyramid of Android Testing"Alexey Buzdin "Maslow's Pyramid of Android Testing"
Alexey Buzdin "Maslow's Pyramid of Android Testing"
 
Тарас Олексин - Sculpt! Your! Tests!
Тарас Олексин  - Sculpt! Your! Tests!Тарас Олексин  - Sculpt! Your! Tests!
Тарас Олексин - Sculpt! Your! Tests!
 

Viewers also liked (8)

基于Cocos2 d x二次开发的自有引擎方案分享-mobile 2d framework en
基于Cocos2 d x二次开发的自有引擎方案分享-mobile 2d framework en基于Cocos2 d x二次开发的自有引擎方案分享-mobile 2d framework en
基于Cocos2 d x二次开发的自有引擎方案分享-mobile 2d framework en
 
杜增强 Flash移动开发优化技巧
杜增强 Flash移动开发优化技巧杜增强 Flash移动开发优化技巧
杜增强 Flash移动开发优化技巧
 
优秀Flash产品演示与技术解析
优秀Flash产品演示与技术解析优秀Flash产品演示与技术解析
优秀Flash产品演示与技术解析
 
杜增强 Flash移动项目展示
杜增强 Flash移动项目展示杜增强 Flash移动项目展示
杜增强 Flash移动项目展示
 
iOS中Lua脚本的应用
iOS中Lua脚本的应用iOS中Lua脚本的应用
iOS中Lua脚本的应用
 
2011/08/20跨平台行動應用程式使用者介面開發—以titanium mobile為例
2011/08/20跨平台行動應用程式使用者介面開發—以titanium mobile為例2011/08/20跨平台行動應用程式使用者介面開發—以titanium mobile為例
2011/08/20跨平台行動應用程式使用者介面開發—以titanium mobile為例
 
Intro to appcelerator
Intro to appceleratorIntro to appcelerator
Intro to appcelerator
 
Objective C Tricks
Objective C TricksObjective C Tricks
Objective C Tricks
 

Similar to 杜增强-Flex3组件生命周期

Coldbox developer training – session 4
Coldbox developer training – session 4Coldbox developer training – session 4
Coldbox developer training – session 4
Billie Berzinskas
 

Similar to 杜增强-Flex3组件生命周期 (20)

Building Components In Flex3
Building Components In Flex3Building Components In Flex3
Building Components In Flex3
 
Flex Building User Interface Components
Flex Building User Interface ComponentsFlex Building User Interface Components
Flex Building User Interface Components
 
Diving Deep with the Flex Component Life Cycle
Diving Deep with the Flex Component Life CycleDiving Deep with the Flex Component Life Cycle
Diving Deep with the Flex Component Life Cycle
 
Diving Deep with the Flex Component Life Cycle
Diving Deep with the Flex Component Life CycleDiving Deep with the Flex Component Life Cycle
Diving Deep with the Flex Component Life Cycle
 
Flex component lifecycle
Flex component lifecycleFlex component lifecycle
Flex component lifecycle
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Invalidation Routines Pounded Into Your Cranium
Invalidation Routines Pounded Into Your CraniumInvalidation Routines Pounded Into Your Cranium
Invalidation Routines Pounded Into Your Cranium
 
Diving Deep with the Flex Component Life Cycle
Diving Deep with the Flex Component Life CycleDiving Deep with the Flex Component Life Cycle
Diving Deep with the Flex Component Life Cycle
 
Behavioral pattern 4
Behavioral pattern 4Behavioral pattern 4
Behavioral pattern 4
 
Working Effectively With Legacy Code
Working Effectively With Legacy CodeWorking Effectively With Legacy Code
Working Effectively With Legacy Code
 
[NDC 2019] Enterprise-Grade Serverless
[NDC 2019] Enterprise-Grade Serverless[NDC 2019] Enterprise-Grade Serverless
[NDC 2019] Enterprise-Grade Serverless
 
[NDC 2019] Functions 2.0: Enterprise-Grade Serverless
[NDC 2019] Functions 2.0: Enterprise-Grade Serverless[NDC 2019] Functions 2.0: Enterprise-Grade Serverless
[NDC 2019] Functions 2.0: Enterprise-Grade Serverless
 
Coldbox developer training – session 4
Coldbox developer training – session 4Coldbox developer training – session 4
Coldbox developer training – session 4
 
Fundamental Concepts of React JS for Beginners.pdf
Fundamental Concepts of React JS for Beginners.pdfFundamental Concepts of React JS for Beginners.pdf
Fundamental Concepts of React JS for Beginners.pdf
 
Grails unit testing
Grails unit testingGrails unit testing
Grails unit testing
 
Selenium interview questions and answers
Selenium interview questions and answersSelenium interview questions and answers
Selenium interview questions and answers
 
2008 - TechDays PT: WCF, JSON and AJAX for performance and manageability
2008 - TechDays PT: WCF, JSON and AJAX for performance and manageability2008 - TechDays PT: WCF, JSON and AJAX for performance and manageability
2008 - TechDays PT: WCF, JSON and AJAX for performance and manageability
 
Diving in the Flex Data Binding Waters
Diving in the Flex Data Binding WatersDiving in the Flex Data Binding Waters
Diving in the Flex Data Binding Waters
 
Backbone to React. What it says about awesome UI Code.
Backbone to React. What it says about awesome UI Code.Backbone to React. What it says about awesome UI Code.
Backbone to React. What it says about awesome UI Code.
 
Workshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testingWorkshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testing
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 

杜增强-Flex3组件生命周期

  • 1. Adobe Flex 3 Component Lifecycle Presented by Ethan Du(杜增强)
  • 2. Who am I ? Ethan Du – Senior Flex Architect @ 123Show – blog: http://www.duzengqiang.com
  • 3. Flex   What is Flex? • MXML • A set of components • The component lifecycle!
  • 4. Flex Component Lifecycle   What is it? • The way the framework interacts with every Flex component • A set of methods the framework calls to instantiate, control, and destroy components
  • 5. Phases of the Lifecycle   3 Main Phases:   BIRTH: • construction, configuration,attachment, initialization   LIFE: • invalidation, validation, interaction   DEATH: • detachment, garbage collection
  • 8. What is a constructor?   A function called to instantiate (create in memory) a new instance of a class
  • 9. How is a constructor invoked? Actionscript: var theLabel : Label = new Label(); MXML: <mx:Label id="theLabel"/>
  • 10. What does an ActionScript3 constructor look like? public function ComponentName() { super(); //blah blah blah }   No required arguments (if it will be used in MXML); zero, or all optional   Only one per class (no overloading!)   No return type   Must be public   Call super()…or the compiler will do it for you.
  • 11. What should a constructor do?   A good place to add event listeners to the object.   Not much. Since the component’s children have not yet been created, there’s not much that can be done.
  • 12. Don’t create or add children in the constructor   It’s best to delay the cost of createChildren calls for added children until it’s necessary
  • 14. Configuration   The process of assigning values to properties on objects   In MXML, properties are assigned in this phase, before components are attached or initialized <local:SampleChild property1="value"/>
  • 15. Configuration Optimization   To avoid performance bottlenecks, make your setters fast and defer any real work until validation   We’ll talk more about deferment in the validation / invalidation section
  • 17. What is attachment?   Adding a component to the display list (addChild, addChildAt, MXML declaration)
  • 18. Methods addingChild(child); $addChildAt(child, index); childAdded(child);
  • 19. Must know about attachment   The component lifecycle is stalled after configuration until attachment occurs.
  • 20. Consider this component: public class A extends UIComponent { public function A() { trace( "CONSTRUCTOR" ); super(); } override protected function createChildren() : void { trace( "CREATECHILDREN" ); super.createChildren(); } override protected function measure() : void { trace( "MEASURE" ); super.measure(); } override protected function updateDisplayList(width:Number, height:Number) : void { trace( "UPDATEDISPLAYLIST" ); super.updateDisplayList(width,height); } override protected function commitProperties():void { trace( "COMMITPROPERTIES" ); super.commitProperties(); } (It traces all of its methods.)
  • 21. And this application: <mx:Application ...> <mx:Script> <![CDATA[ override protected function createChildren() : void { super.createChildren(); var a : A = new A(); } ]]> </mx:Script> </mx:Application>
  • 22. Output: CONSTRUCTOR   Without attachment, the rest of the lifecycle doesn’t happen.
  • 23. But what about this application? <mx:Application ...> <mx:Script> <![CDATA[ override protected function createChildren() : void { super.createChildren(); var a : A = new A(); this.addChild( a ); } ]]> </mx:Script> </mx:Application>
  • 24. Output: CONSTRUCTOR CREATECHILDREN COMMITPROPERTIES MEASURE UPDATEDISPLAYLIST Don’t add components to the stage until you need them.
  • 26. Initialization 1. ‘preInitialize’ dispatched 2. createChildren(); called 3. ‘initialize’ dispatched 4. first validation pass occurs 5. ‘creationComplete’ dispatched – component is fully commited, measured, and updated.
  • 27. createChildren()   MXML uses the createChildren() method to add children to containers   Override this method to add children using AS • Follow MXML’s creation strategy: create, configure, attach override protected function createChildren():void { ... textField = new UITextField(); textField.enabled = enabled; textField.ignorePadding = true; textField.addEventListener("textFieldStyleChange", textField_textFieldStyleChangeHandler); ... ... addChild(DisplayObject(textField)); }
  • 28. 3 Important Rules 1. Containers must contain only UIComponents 2. UIComponents must go inside other UIComponents. 3. UIComponents can contain anything (Sprites, Shapes, MovieClips, Video, etc).
  • 29. Life
  • 30. Invalidation / Validation cycle   Flex imposes deferred validation on the Flash API • goal: defer screen updates until all properties have been set   3 main method pairs to be aware of: • invalidateProperties() -> commitProperties() • invalidateSize() -> measure() • invalidateDisplayList() -> updateDisplayList()
  • 31. Deferment   Deferment is the central concept to understand in the component Life-cycle   Use private variables and boolean flags to defer setting any render-related properties until the proper validation method
  • 32. bad example public function set text(value:String):void { myLabel.text = value; }
  • 33. good example private var _text:String = ""; private var textChanged:Boolean = false; public function set text(value:String):void { _text = value; textChanged = true; invalidateProperties(); invalidateSize(); invalidateDisplayList(); } override protected function commitProperties():void{ { if(textChanged){ myLabel.text = _text; textChanged = false; } super.commitProperties(); }
  • 35. Interaction   Flex is an Event Driven Interaction Model.
  • 36. Death
  • 38. Detachment   “Detachment” refers to the process of removing a child from the display list   These children can be re-parented (brought back to life) or abandoned to die   Abandoned components don’t get validation calls and aren’t drawn   If an abandoned component has no more active references, it *should* be garbage- collected
  • 40. Garbage Collection   The process by which memory is returned to the system   Only objects with no remaining references to them will be gc’d • Set references to detached children to “null” to mark them for GC   Consider using weak references on event listeners
  • 41. Conclusion   Defer, Defer, DEFER!   Use validation methods correctly
  • 42. Conclusion   Defer, Defer, DEFER!   Use validation methods correctly
  • 43. References   Ely Greenfield: “Building a Flex Component” •http://www.onflex.org/ACDS/BuildingAFlexCo mponent.pdf   RJ Owen: “Flex 3 Component Life-cycle” •http://rjria.blogspot.com/2009/04/cf-united- express-denver-presentation.html   Mrinal Wadhwa: “Flex 4 Component Lifecycle” •http://weblog.mrinalwadhwa.com/2009/06/21/ flex-4-component-lifecycle/
  • 44. QA