加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

actionscript-3 – Adob??e Air AS3,处理窗口,探查器建议库代码

发布时间:2020-12-15 01:45:16 所属栏目:百科 来源:网络整理
导读:我的应用程序创建了一个包含几个组的窗口.当窗口关闭时,GC不会收集窗口及其后代. Flash Builder Profiler帮助我找到并删除事件监听器,使我无法发现问题,因为它指向从Window.as的库代码添加的事件监听器. 具体来说,比较之前窗口打开和窗口关闭之后的闲置对象,
我的应用程序创建了一个包含几个组的窗口.当窗口关闭时,GC不会收集窗口及其后代.

Flash Builder Profiler帮助我找到并删除事件监听器,使我无法发现问题,因为它指向从Window.as的库代码添加的事件监听器.

具体来说,比较之前窗口打开和窗口关闭之后的闲置对象,并选择MyWin类(1个实例):

MyPackageName.MyWin(10条路径)

10x以下行:

Function [savedThis] 569222 GCRoot:Yes bytes:308

单击“方法”面板中的每个“功能”,我会在每个“功能”的顶部看到以下10个:

spark.components:Window:creationCompleteHandler()    Window.as line 2610
spark.components:Window:creationCompleteHandler()    Window.as line 2613
spark.components:Window:creationCompleteHandler()    Window.as line 2616
spark.components:Window:creationCompleteHandler()    Window.as line 2619
spark.components:Window:creationCompleteHandler()    Window.as line 2625
spark.components:Window:creationCompleteHandler()    Window.as line 2639
spark.components:Window:creationCompleteHandler()    Window.as line 2636
Spark.components.supportClasses:SkinnableComponent:attachSkin() SkinnableComponent.as line 694
Spark.components:SkinnableContainer:partAdded()      SkinnableContainter.as line 959
Spark.components:SkinnableContainer:partAdded()      SkinnableContainter.as line 957

所有这些都以某种方式从MyWin.initialize()调用.

我删除了我的代码创建的每个事件监听器,并删除了所有转换.
但仍然无法弄清楚这个的含义以及如何处理窗口.
任何帮助,都会非常感激,因为我已经挣扎了好几天了.

解决方法

You can try to use 

    System.pauseForGCIfCollectionImminent(1)

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/System.html#pauseForGCIfCollectionImminent%28%29

or try to use 

    System.gc() 

in this way

   private var numCollected; uint = 0;

   private function gCollect(): void
   {
       addEventListeners(Event.ENTER_FRAME,onEFGCollect);
   }

   private function onEFGCollect(event: Event): void
   {
     numCollected++;
     System.gc();
     if(numCollected > 2)
         removeEventListeners(Event.ENTER_FRAME,onEFGCollect);
   }

我们在单独的框架中使用System.gc()两次只是因为收集对象需要将所有这些标记为已收集 – 并且只有在System.gc()之后才能收集对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读