【发布时间】:2014-06-23 17:48:57
【问题描述】:
我正在监控我的互联网连接。当没有可用的服务时,我会从我的 URLMonitor 获得一个事件。我正在听这个事件并调用一个打开 SkinnablePopUpContainer 的函数。这是一个非常简单的组件,我没有附加任何侦听器,它仅在函数内部定义。当用户单击 SkinnablePopUpContainer 内的按钮时,我会关闭组件并尝试使用我知道的所有可能方式来销毁它。当我从 Flash Builder 检查 Profiler Tool 时,SkinnablePopUpContainer 仍然存在。如何销毁此组件以释放它正在使用的内存。
这里是监听函数:
protected function onNoServiceAvailable(e:*):void
{
var noserviceWindow:NoInternetError = new NoInternetError();
noserviceWindow.open(this,false);
noserviceWindow.x= 0;
noserviceWindow.y= 0;
noserviceWindow.width = SharedObject.getLocal('localObj').data.appMeasures.appWidth;
noserviceWindow.height = SharedObject.getLocal('localObj').data.appMeasures.appHeight+200;
}
这是我的 SkinnablePopUpContainer
<?xml version="1.0" encoding="utf-8"?>
<s:SkinnablePopUpContainer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:nxTextInput="nx.components.extended.nxTextInput.*"
xmlns:nxButton="nx.components.extended.nxButton.*"
backgroundAlpha="0.4"
horizontalCenter="0" verticalCenter="0" width="100%" height="100%">
<fx:Script>
<![CDATA[
protected function loginButton_clickHandler(event:Event):void
{
loginButton.removeEventListener(MouseEvent.CLICK,loginButton_clickHandler);
this.close();
var ob = this;
ob = null;
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:Panel title="Fehler"
horizontalCenter="0" verticalCenter="0" color="white">
<s:VGroup horizontalAlign="center" verticalAlign="middle" gap="20"
height="100%" width="100%">
<s:BitmapImage source="@Embed('assets/nxInspect/mobile/assetsCI/redAssets/alert_80x80.png')" id="iconBitmpapDownOnline" verticalCenter="0" />
<s:Label id="serviceFailure" text="Keine internetverbindung." width="90%" styleName="interactable" textAlign="center" color="white"/>
<nxButton:NxButton id="loginButton" label="OK" width="100%" height="100" click="loginButton_clickHandler(event)" styleName="alert"/>
</s:VGroup>
</s:Panel>
【问题讨论】:
-
分析器(在 Flash Builder 中)有一种方法可以显示“游荡对象”,并且从该对象列表中您可以看到每个对象的“gc_root”是什么。 “gc_root”(“垃圾收集根”或类似名称)是将对象固定在内存中的东西。现在,我猜人们使用 Adobe Scout,也许它有类似的功能?
-
另外,请注意 Flex 框架(过去)本身可能导致内存泄漏,b/c 框架的某些部分保留了对对象的引用。大多数问题现在已经解决了......在你的情况下,我可能怀疑
PopupManager类,或者你弹出窗口中的嵌入图像,任何数据绑定,资源包的使用等等。
标签: actionscript-3 apache-flex mobile flex4 flex4.5