Created
September 6, 2012 14:30
-
-
Save lynxerzhang/3656871 to your computer and use it in GitHub Desktop.
关于Worker和MessageChannel的使用注意事项
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
查阅Adobe文档发现ByteArray的shareable属性已经移入了下一版本的FlashPlayer中,也就是目前(11.4)即使设置了该属性,也无作用。 | |
也就是通过MessageChannel发送出去的是副本, 而不是引用。 | |
同时在新创建的Worker中获取主Worker(主swf文件的Worker)中该worker所设置的MessangeChannel时需要注意, 添加监听最好在最后阶段。 | |
例如: | |
在主文件中,我们这样设置 | |
worker = WorkerDomain.current.createWorker(Workers.HandleConcurrent, false); | |
mainToBack = Worker.current.createMessageChannel(worker); | |
backToMain = worker.createMessageChannel(Worker.current); | |
//我们设置了从主线程到副线程和副线程到主线程的通信所需要的MessangeChannel | |
worker.setSharedProperty("mainToBack", mainToBack); | |
worker.setSharedProperty("backToMain", backToMain); | |
在副线程中: | |
我们获取这些设置 | |
mainToBack = Worker.current.getSharedProperty("mainToBack"); | |
mainToBack.addEventListener(Event.CHANNEL_MESSAGE, mainToBackHandler); | |
backToMain = Worker.current.getSharedProperty("backToMain"); | |
这样看似没有问题, 但是需要注意的如果主文件在开始副线程(调用worker.start())时,如果同时发送给副线程信息时(调用mainToBack.send()), 第三句代码将不在执行, 直到mainToBackHandler方法执行完毕, 才会获取backToMain的引用。 | |
调用start方法后立即发送消息 | |
worker.start(); | |
mainToBack.send("work is coming"); | |
这就造成了空对象的报错(如果在mainToBackHandler方法中使用backToMain)。所以稳妥的方法是把监听加在最后面 | |
mainToBack = Worker.current.getSharedProperty("mainToBack"); | |
backToMain = Worker.current.getSharedProperty("backToMain"); | |
mainToBack.addEventListener(Event.CHANNEL_MESSAGE, mainToBackHandler); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment