FLEX内存无法释放,详细见补充。还望高手不吝赐教,万分感激。

使用模块方式,每加载一次模块,内存就增加5-10M不等,而且不会释放。加载模块的代码是统一封装的,每次加载前,都会卸载之前的模块。加载卸载的代码如下:publicfunc... 使用模块方式,每加载一次模块,内存就增加5-10M不等,而且不会释放。

加载模块的代码是统一封装的,每次加载前,都会卸载之前的模块。加载卸载的代码如下:

public function load(url:String, container:Group = null, data:Object = null):void {

if(url == null || url == "null")

return;

unload();

_url = url;

_container = container;

_data = data;

doload();

}

public function unload():void {

if (_info != null) {

_info.unload();

_info = null;

}

MemoryUtils.gc();

}

public function get element():ILongtopModule {

return _element;

}

private function doload():void {

_info = ModuleManager.getModule(_url);

_info.addEventListener(ModuleEvent.READY, moduleReadyHandler, false, 0, true);

_info.addEventListener(ModuleEvent.ERROR, moduleErrorHandler, false, 0, true);

_info.load(ApplicationDomain.currentDomain);

}

尝试过在加载时,将模块加载到独立子域,可以解决内存问题,模块切换时可以释放内存,但与现有的很多代码不兼容,很多弹出界面就打不开了。具体原因未知。
展开
 我来答
百度网友d18ea0f
2011-03-27 · TA获得超过174个赞
知道小有建树答主
回答量:145
采纳率:0%
帮助的人:168万
展开全部
我查看了一下官方的文档,因为IModuleInfo的load方法只是加载模块,而不是创建模块的实例。如果你在其他地方使用ModuleLoader标签或者通过_info创建模块的实例了,模块也不能别完全卸载,而只是作为垃圾回收的对象。

但是,对于垃圾回收,有个问题。
1、垃圾的回收不可预知。(调用MemoryUtils.gc();方法并不一定会触发垃圾回收)
2、只有在请求内存的时候才会触发垃圾回收,而不是在删除对象引用时。

另外,对于你的代码,你可以确认一下,对于同一个module来说,你是否调用的是同一个类实例(上面你贴出的这些方法所在的类)的load和unload方法,且该类实例是否被其他对象长期持有?
在调用_info.unload();方法前,调用_info.release()方法将当前的引用释放到模块中。

总的来说,你一定要确保该对该模块实例的引用、对_info的引用确实已经都删除了,才能真正的完全卸载模块。 (样式、时间这些都可能导致你不能正常卸载模块,详细的请查看参考资料。)

参考资料: http://blogs.adobe.com/aharui/2009/08/what_we_know_about_unloading_m.html

wzm995814158
2011-03-24
知道答主
回答量:5
采纳率:0%
帮助的人:0
展开全部
尝试过在加载时,将模块加载到独立子域,可以解决内存问题,模块切换时可以释放内存,但与现有的很多代码不兼容,很多弹出界面就打不开了。具体原因未知。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
松秋梵畅0D
2011-03-25 · 超过43用户采纳过TA的回答
知道小有建树答主
回答量:142
采纳率:0%
帮助的人:115万
展开全部
模块暂用内存不释放应该还有引用的地方,把引用的地方也置空
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式