使用延迟实例化提高启动效率

问题
我们要保证组件仅仅在需要显示在屏幕上的时候才被创建。
解决办法
为容器类设置创建方针队列并且根据需要对每个子组件使用creationIndex。
讨论
Container 类默认情况下仅仅在要显示组件的时候创建它,因为UIComponent 默认的
creationPolicy 值为auto。换句话说,当视图(view)设置成可视的时候,如果还没有创建
该视图,则组件会实例化此视图。creationPolicy 的其他可能值为none,意指,所有组件
将会创建、列队,这里的创建和列队指根据其creationIndex 值进行创建。creationIndex
是以0 起始的顺序数组,组件的子组件会根据这个顺序数组来创建。
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" height="600"
width="600">
<mx:Script>
<![CDATA[
private function changeViewStackCreation():void
{
viewStack.creationPolicy = (comboBox.selectedItem as
String);
viewStack.createComponentsFromDescriptors(true);
}
private function changeViewStack():void
{
viewStack.selectedIndex =
comboBoxChangeIndex.selectedIndex;
}
]]>
</mx:Script>
<mx:Fade alphaFrom="0" alphaTo="1" duration="4000"
id="fadeIn"/>
<mx:ComboBox dataProvider="{['none', 'all', 'queued',
'auto']}" change="changeViewStackCreation()"
id="comboBox"/>
<mx:ComboBox dataProvider="{[1, 2, 3, 4]}" x="150"
change="changeViewStack()" id="comboBoxChangeIndex"/>
<mx:ViewStack id="viewStack" width="400" height="300"
creationPolicy="none" y="100">
<mx:Canvas creationCompleteEffect="{fadeIn}"
creationIndex="0" backgroundColor="#0000ff"
id="canvas1">
<mx:LinkButton label="Link Button Number One"/>
</mx:Canvas>
<mx:Canvas creationCompleteEffect="{fadeIn}"
creationIndex="1" backgroundColor="#0000ff"
id="canvas2">
<mx:LinkButton label="Link Button Number Two"/>
</mx:Canvas>
<mx:Canvas creationIndex="2" id="canvas3"
creationCompleteEffect="{fadeIn}" backgroundColor
="#0000ff">
<mx:LinkButton label="Link Button Number Three"/>
</mx:Canvas>
<mx:Canvas creationIndex="3" id="canvas4"
creationCompleteEffect="{fadeIn}" backgroundColor
="#0000ff" >
<mx:LinkButton label="Link Button Number Four"/>
</mx:Canvas>
</mx:ViewStack>
</mx:Canvas>

你可能感兴趣的:(Adobe)