你需要划分这个冗长的工作,以便它可以发生在多个帧。执行代码时,Flash/Flex不会更新屏幕。查看Flash的elastic race track以帮助理解原因。 Flex组件生命周期也在其上添加了另一个层。顺便说一下,拨打validateNow()
可能会计算成本很高,可能会使您的循环花费更长的时间:)
有许多方法可以分解循环中的工作。
下面是使用callLater()一个简单的例子:
private function startWorking():void
{
// create a queue of work (whatever you are iterating over)
// in your loop you're counting to 280, you could use a
// simple counter variable here instead
var queue:Array = [ a, b, c];
callLater(doWork, [ queue ]);
}
private function doWork(workQueue:Array):void
{
var workItem:Object = workQueue.shift();
// do expensive work to create the element to add to screen
addElement(...);
if (workQueue.length > 0)
callLater(doWork, workQueue);
}
您可能需要同时处理超过1项。您也可以使用ENTER_FRAME事件代替callLater()
(本质上,这是callLater()
正在执行的操作)来做同样的事情。
参考:
它的Flex移动应用程序 – hassicho
也许如果你解释你试图完成;我们可以指导您更好地解决您的问题。我不希望在Flex应用程序中添加280个项目会非常有效。也许你会更适合使用基于列表的控件,它不需要渲染全部280个元素。 – JeffryHouser