使用Apache Flex的Worker
首先
下面简单总结了在Apache Flex中使用Worker的方法。
当执行需要时间的操作时,屏幕上可能会出现等待时间,
但是通过使用Worker,可以同时执行操作,从而避免屏幕上出现等待时间。
一个简单的例子
假设我们在Sub.as文件中编写了一个耗时的处理过程,并且希望在Main.mxml中调用并执行这个处理过程。
在Main.mxml中,加载Sub.swf后,以以下方式进行。
[Embed(source="../Sub.swf", mimeType="application/octet-stream")]
private var subClass:Class;
以下的操作可以执行。
var worker:Worker = WorkerDomain.current.createWorker(new subClass());
worker.start();
Main.mxml和Sub.as的内容将在后面进行描述。
(为了替代耗时的处理,编写了一个只进行5秒间隔睡眠的处理)
当点击「在Main中运行」按钮时,会在屏幕上产生等待时间,
而当点击「在Sub中运行」按钮时,由于使用了Worker,屏幕上不会产生等待。
在本次情况下,需要先编译Sub.as并创建Sub.swf。
> amxmlc src/Sub.as -output Sub.swf -debug=true
> amxmlc src/Main.mxml -output Main.swf
为了确认Sub.as脚本中trace(“Sub finished”)的输出内容,Sub.as脚本被编译时使用了-debug=true选项。
Main.mxml主要文件
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Style>
* {
fontFamily: "Meiryo";
}
</fx:Style>
<fx:Script>
<![CDATA[
import mx.controls.Alert;
[Embed(source="../Sub.swf", mimeType="application/octet-stream")]
private var subClass:Class;
private function sleepMain():void {
// 5秒スリープ
var time:Number = new Date().getTime();
while (new Date().getTime() - time < 5000) {
}
Alert.show("完了");
}
private function sleepSub():void {
var worker:Worker = WorkerDomain.current.createWorker(new subClass());
worker.start();
Alert.show("完了");
}
]]>
</fx:Script>
<s:Button label="Mainで実行" left="10" top="10" click="sleepMain();" />
<s:Button label="Subで実行" left="10" top="40" click="sleepSub();" />
</s:WindowedApplication>
订阅。
package {
import flash.display.Sprite;
public class Sub extends Sprite {
public function Sub() {
// 5秒スリープ
var time:Number = new Date().getTime();
while (new Date().getTime() - time < 5000) {
}
trace("Sub finished");
}
}
}