我一直在尝试分析我的 flex 移动应用程序是否存在内存泄漏,但我得到了非常无法解释的结果,所以我决定做一个可以想象的最基本的测试,看看 flex 内存管理是否可靠。
第一视图.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:View
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
title="FirstView"
>
<s:Button
label="Go to child"
click="navigator.pushView(ChildView)"
/>
</s:View>
子视图.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:View
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
title="ChildView"
>
<s:Button
label="Back to home"
click="navigator.popView()"
/>
</s:View>
而已。再简单不过了。
因此,如果您尝试使用内存分析器对此进行分析,请执行以下操作:
- 启动应用程序,拍摄快照
- 转到子视图并返回,然后运行垃圾收集并拍摄快照。
- 重复步骤 2 几次
现在去尝试在任意两个快照上“查找游荡对象”,在返回第一个视图后您会发现 100 多个“游荡”对象,并且子视图中的所有内容都应该被破坏。这真的令人沮丧,因为在内存管理方面没有可以想象的方法可以使这更简单或“更干净”。
谁能解释为什么这些对象被创建并且永远不会被丢弃?此外,有关获得真正干净的基于视图的移动应用程序的任何提示,该应用程序真正删除与被破坏的视图相关的所有内存都会很棒。
到目前为止,我有:
- 总是添加弱事件监听器
- 关闭视图时将变量设置为 null(并删除事件侦听器)
谢谢安迪