flex的内存泄露问题

 

        用flex开发几个月了,最近发现flex有内存泄露问题。网上找了一些文章,有很大收获。不过有些也很哆嗦,像《FLEX内存释放优化原则》,道理是对的,但是无法作为团队开发的开发规范,这么多,谁记得住啊。

        经过多次实验,得出以下几个注意点就行了。

1.       监听事件时用弱引用方式(特别是对Applicatiion.applicaionStage的事件监听),方式如下:第五个参数值为true

Application.application.addEventListener(MouseEvent.CLICK,doClick,false,0,true);

2.       集合类如ArrayDictionary里的元素,在不用的时候要设置为null;(尤其是主页面上的集合类),如:myMap[o]=null;

3.   方法中创建的变量引用必须用var修饰,否则将被认为是全局变量,永远不会释放内存。

4.   所有的css类都定义到css.css文件里,不要在模块里定义css,不然会导致gc不干净

5.       moduelLoader的内存泄露问题:

经过初步测试,在debug版的flashplayer里,ModuleLoaderunload方法有严重的内存泄露问题(用moduleLoader不断地加载不同的url);但是在release版中表现正常;

如果需要在debug版的方法里规避此问题可用以下方法加载url,不要用unloader方法:

/**

        *为了解决moduleLoader的内存泄露问题

        * @param oldMLoader 需要改变urlmoduleLoader

        * @param url 指定的url

        *

        */

static public function fixLoadForModuleLoader(oldMLoader:ModuleLoader,url:String):void{

           var tparent:Container=oldMLoader.parent;

           var index=oldMLoader.parent.getChildIndex(oldMLoader);

           var newMLoader:ModuleLoader=new ModuleLoader();

           newMLoader.url=url;

           tparent.removeChildAt(index);

           tparent.addChildAt(newMLoader,index);

           newMLoader.name=oldMLoader.name;

           newMLoader.percentWidth=oldMLoader.percentWidth;

           newMLoader.percentHeight=oldMLoader.percentHeight;

           oldMLoader=newMLoader;

           if(oldMLoader.parent is ViewStack){

              (oldMLoader.parent as ViewStack).selectedIndex=index;

           }else if(oldMLoader.parent is TabNavigator){

              (oldMLoader.parent as TabNavigator).selectedIndex=index;

           }

          

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值