同一SWF中多个共享对象未收到onSync删除事件

14

我有一个使用远程共享对象的应用程序,发现了一些奇怪的行为。我正在使用Flash Builder编写AS3中的ActionScript应用程序,并连接到Wowza Media Server 2。

我的应用程序工作得很好,但现在我想使用FlexUnit为其编写单元测试。我的单元测试涉及创建多个连接到同一个远程共享对象,并确保我能够正确获得更新。除了我没有获取到info.code为“delete”的SyncEvent.SYNC事件外,一切似乎都很正常。当我在单独的标签页或甚至在同一页内嵌的不同SWF中独立运行我的应用程序时,它可以正常工作。但是,在单元测试中,出现了问题。我发现,如果我在同一个SWF中使用Loader加载这些SWF,则会出现相同的行为。对我来说,这似乎与同一SWF中多个相同共享对象的行为方式有关。在onSync事件中,我也必须解决其他奇怪的行为,例如oldValues未正确设置的问题。

有人有什么建议吗?这是已知的问题吗?还是我疯了? :)

非常感谢您的帮助!


你并不是疯了!今天我也遇到了同样的问题,我花了8个小时才找出这个问题。我在使用多个远程SO引用时,当我移除事件监听器时,我把所有的引用都移除了,或者当我关闭一个SO引用时,我关闭了所有的引用... SharedObject似乎是一个非常有缺陷的单例。 - mizi_sk
我知道这是一个旧的帖子,但现在已经是2016年了,我也遇到了这个问题 - 这个问题解决了吗? - Rich
3个回答

0
在我们的项目中,删除操作也出现了类似的行为。当我们调用 so.close() 函数时,在共享对象中删除了一些键之后,再次连接 SO 时,它仍然能够看到已删除的键仍存在。
解决方法:不要关闭 SO 或使用某些常量值(例如-2)更新已删除的键以标记其已删除。
使用了 Wowza 3。

0
要获取您的sharedObject实例,您可以使用静态方法SharedObject.getRemote()。我相信这个方法将始终为给定名称返回相同的实例(如果持久性参数具有相同的值)。
当您从应用程序中删除SharedObject(mySO = null)并在垃圾收集器完成其工作之前重新实例化它时,您可能会遇到同样的问题。
这种行为对我来说是有意义的,但我必须承认有时会成为问题。无论如何,在调试会话中测试应该很容易(查看对象实例编号)。
现在谈论单元测试,您正在测试什么?SharedObjects的行为吗?如果是这样,我认为这里存在一些误解。如果您真的想测试这种行为(我对原因很感兴趣),那么我想您需要运行两个单独的应用程序的更复杂的测试。
希望能有所帮助!

0

我以前也遇到过这个问题,当时我在使用一些编码框架(如Cairngorm)和连接到AMFPHP的多个远程对象来开发Flex应用程序。

那时我想到的解决方法是确保这些远程对象不会同时触发。也就是尝试制作一些所谓的“顺序链”,一个接一个地触发这些远程对象。

为了实现这一点,如果你从头开始做可能会很困难,你可以考虑利用那些现代的ActionScript框架2.0来帮助你(例如SWIZ或Robotlegs)。这可能在一开始处理起来太复杂了。我建议你只需将远程对象部分交给框架处理,同时保持其他部分不变。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接