SlideShare a Scribd company logo
1 of 27
Жизненный цикл компонентов Component Lifecycle Overview Павел Кожин [email_address] Exigen Services
Что такое жизненный цикл и для чего он нужен   ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Единая концепция   Управление Детализация Переопределение createChildren() commitProperties() measure() updateDisplayList()
Фаза 1
Инстанциирование ,[object Object],[object Object],[object Object],<local:MyCopm/> var comp:MyComp = new MyCopm(); comp.setStyle(“…”, “…”); public function MyCopm { super(); addEventListener( MouseEvent.CLICK, clickHandler); } Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 1
Конструктор ,[object Object],[object Object],[object Object],Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора <my:CustomBtn/> var btn:CustomBtn = new CustomBtn(); btn.setStyle(“…”, “…”); public function CustomBtn { super(); addEventListener( MouseEvent.CLICK, clickHandler); } 1
get/set  методы ,[object Object],[object Object],[object Object],Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора var foo:Array = [“Hello”, “World!”]; public function set data(val:Array):void{ _data = val; dataChanged = true; invalidateProperties(); } 1
Фаза 2
Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора parentComponent.addChild(instance); 2 addChild() / addChildAt() initialize() Вызов вручную для  не визуальных компонентов
Фазы инициализации ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 2
createChildren() ,[object Object],[object Object],[object Object],[object Object],[object Object],Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 2
Пример переопределения protected var closeButon:UIComponent; override protected function  createChildren():void{ if (!closeButton){ closButton = new Button(); Button(closeButton).label = “x”; } addChild(closeButton); closeButton.addEventListener( MouseEvent.CLICK, clickHandler); super.createChildren(); } Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 2
Отложенная валидация ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 2
Валидация: роль  LayoutManager Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 2 LayoutManager invalidatePropertiesQueue invalidateSizeQueue invalidateDisplayListQueue validateProperties() validateSize() validateDisplayList()
commitProperties() ,[object Object],[object Object],Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 2 invalidateProperties() validateProperties() commitProperties()
Пример  commitProperties() public function set historyManagementEnabled(value:Boolean) : void{ if (value != _historyManagementEnabled){ _historyManagementEnabled = value ; historyManagementEnabledChanged = true; invalidateProperties(); } } Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 2
measure() ,[object Object],[object Object],[object Object],[object Object],[object Object],Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 2 invalidateSize() validateSize() masure()
Пример  measure() override protected function measure():void { for (var i:int = 0; i < numChildren; ++i){ var child:UIComponent = UIComponent(getChildAt()) measuredHeight += child.getExplicitOrMeasuredHeight() + VERTICAL_GAP; } measuredMinWidth = 10; measuredMinHeight = measuredHeight; } Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 2
updateDisplayList() ,[object Object],[object Object],[object Object],[object Object],[object Object],Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 2 invalidateDisplayList() validateDisplayList() updateDisplayList()
Пример  updateDisplayList() override protected function updateDisplayList():void{ … item.data = data; UIComponentGlobals.layoutManager.validateClient( item, true); var w:Number = item.getExplicitOrMeasuredWidth(); item.setActualSize(w, h); item.move(x, y); } Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 2
Размеры ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 2
Фаза 3
Отдельная тема Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 3
Фаза 4
Уборка ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 4
Сравнение цикла  MX(AS2)  и  Flex  destroyObject(id:String) removeChild invalidateSize invalidateDisplayList redraw commitProperties redraw measure draw / size updateDisplayList invalidate invalidateProperties removeChildAt createChildren createChildren init initialize createObject / createClassObject addChild/addChildAt
Вопросы? Павел Кожин [email_address] Exigen Services

More Related Content

Similar to Flex Component Lifecycle Overview

Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Sigma Software
 
Разбираемся с CoordinatorLayout
Разбираемся с CoordinatorLayoutРазбираемся с CoordinatorLayout
Разбираемся с CoordinatorLayoutRambler Android
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
Unit tests final
Unit tests finalUnit tests final
Unit tests finalcorehard_by
 
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжениеШкола-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжениеГлеб Тарасов
 
iOS-05_1-UIKit
iOS-05_1-UIKitiOS-05_1-UIKit
iOS-05_1-UIKitNoveo
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеГлеб Тарасов
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumРуководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumUladzimir Kryvenka
 
Unity standalone project development: improving efficiency
Unity standalone project development: improving efficiencyUnity standalone project development: improving efficiency
Unity standalone project development: improving efficiencyDevGAMM Conference
 
Всеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексВсеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексElena Voynova
 
iOS-05_2-UIKit
iOS-05_2-UIKitiOS-05_2-UIKit
iOS-05_2-UIKitNoveo
 
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016РИФ-Воронеж
 
Веселая ферма. Соседи.
Веселая ферма. Соседи.Веселая ферма. Соседи.
Веселая ферма. Соседи.Doomer Samoiloff
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокAndrey Karpov
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneCodeFest
 
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...CodeFest
 
jQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScriptjQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScriptConstantin Kichinsky
 
«Custom View. Делаем быстро, красиво, чисто». Илья Демидов
«Custom View. Делаем быстро, красиво, чисто». Илья Демидов«Custom View. Делаем быстро, красиво, чисто». Илья Демидов
«Custom View. Делаем быстро, красиво, чисто». Илья ДемидовDataArt
 

Similar to Flex Component Lifecycle Overview (20)

Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
 
Разбираемся с CoordinatorLayout
Разбираемся с CoordinatorLayoutРазбираемся с CoordinatorLayout
Разбираемся с CoordinatorLayout
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
Unit tests final
Unit tests finalUnit tests final
Unit tests final
 
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжениеШкола-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
 
iOS-05_1-UIKit
iOS-05_1-UIKitiOS-05_1-UIKit
iOS-05_1-UIKit
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumРуководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из Selenium
 
Unity standalone project development: improving efficiency
Unity standalone project development: improving efficiencyUnity standalone project development: improving efficiency
Unity standalone project development: improving efficiency
 
Всеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексВсеволод Шмыров, Яндекс
Всеволод Шмыров, Яндекс
 
iOS-05_2-UIKit
iOS-05_2-UIKitiOS-05_2-UIKit
iOS-05_2-UIKit
 
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
 
Android service
Android serviceAndroid service
Android service
 
Веселая ферма. Соседи.
Веселая ферма. Соседи.Веселая ферма. Соседи.
Веселая ферма. Соседи.
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибок
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
 
jQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScriptjQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScript
 
«Custom View. Делаем быстро, красиво, чисто». Илья Демидов
«Custom View. Делаем быстро, красиво, чисто». Илья Демидов«Custom View. Делаем быстро, красиво, чисто». Илья Демидов
«Custom View. Делаем быстро, красиво, чисто». Илья Демидов
 

More from Constantiner

Краткое введение в Mate Flex framework
Краткое введение в Mate Flex frameworkКраткое введение в Mate Flex framework
Краткое введение в Mate Flex frameworkConstantiner
 
Cairngorm Microarchitecture
Cairngorm MicroarchitectureCairngorm Microarchitecture
Cairngorm MicroarchitectureConstantiner
 
Архитектурные проблемы Flex-приложений
Архитектурные проблемы Flex-приложенийАрхитектурные проблемы Flex-приложений
Архитектурные проблемы Flex-приложенийConstantiner
 
Data Binding in Flex
Data Binding in FlexData Binding in Flex
Data Binding in FlexConstantiner
 
Customizing Flex Apps
Customizing Flex AppsCustomizing Flex Apps
Customizing Flex AppsConstantiner
 

More from Constantiner (6)

Flex 4 Gumbo
Flex 4 GumboFlex 4 Gumbo
Flex 4 Gumbo
 
Краткое введение в Mate Flex framework
Краткое введение в Mate Flex frameworkКраткое введение в Mate Flex framework
Краткое введение в Mate Flex framework
 
Cairngorm Microarchitecture
Cairngorm MicroarchitectureCairngorm Microarchitecture
Cairngorm Microarchitecture
 
Архитектурные проблемы Flex-приложений
Архитектурные проблемы Flex-приложенийАрхитектурные проблемы Flex-приложений
Архитектурные проблемы Flex-приложений
 
Data Binding in Flex
Data Binding in FlexData Binding in Flex
Data Binding in Flex
 
Customizing Flex Apps
Customizing Flex AppsCustomizing Flex Apps
Customizing Flex Apps
 

Flex Component Lifecycle Overview

  • 1. Жизненный цикл компонентов Component Lifecycle Overview Павел Кожин [email_address] Exigen Services
  • 2.
  • 3. Единая концепция Управление Детализация Переопределение createChildren() commitProperties() measure() updateDisplayList()
  • 5.
  • 6.
  • 7.
  • 9. Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора parentComponent.addChild(instance); 2 addChild() / addChildAt() initialize() Вызов вручную для не визуальных компонентов
  • 10.
  • 11.
  • 12. Пример переопределения protected var closeButon:UIComponent; override protected function createChildren():void{ if (!closeButton){ closButton = new Button(); Button(closeButton).label = “x”; } addChild(closeButton); closeButton.addEventListener( MouseEvent.CLICK, clickHandler); super.createChildren(); } Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 2
  • 13.
  • 14. Валидация: роль LayoutManager Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 2 LayoutManager invalidatePropertiesQueue invalidateSizeQueue invalidateDisplayListQueue validateProperties() validateSize() validateDisplayList()
  • 15.
  • 16. Пример commitProperties() public function set historyManagementEnabled(value:Boolean) : void{ if (value != _historyManagementEnabled){ _historyManagementEnabled = value ; historyManagementEnabledChanged = true; invalidateProperties(); } } Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 2
  • 17.
  • 18. Пример measure() override protected function measure():void { for (var i:int = 0; i < numChildren; ++i){ var child:UIComponent = UIComponent(getChildAt()) measuredHeight += child.getExplicitOrMeasuredHeight() + VERTICAL_GAP; } measuredMinWidth = 10; measuredMinHeight = measuredHeight; } Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 2
  • 19.
  • 20. Пример updateDisplayList() override protected function updateDisplayList():void{ … item.data = data; UIComponentGlobals.layoutManager.validateClient( item, true); var w:Number = item.getExplicitOrMeasuredWidth(); item.setActualSize(w, h); item.move(x, y); } Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 2
  • 21.
  • 23. Отдельная тема Создание Конфигурация Присоединение Инициализация Инвалидация Взаимодействие Удаление Сборка мусора 3
  • 25.
  • 26. Сравнение цикла MX(AS2) и Flex destroyObject(id:String) removeChild invalidateSize invalidateDisplayList redraw commitProperties redraw measure draw / size updateDisplayList invalidate invalidateProperties removeChildAt createChildren createChildren init initialize createObject / createClassObject addChild/addChildAt
  • 27. Вопросы? Павел Кожин [email_address] Exigen Services