`
aksoft
  • 浏览: 45455 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

Unloading SWFs: Loader.unload() versus Loader.unloadAndStop() Methods

    博客分类:
  • AS3
阅读更多
内存确实释放了一部分。但是还有一部分会累加。
地址:http://www.flashandmath.com/intermediate/swfload/unloading.html


这样的一种情况:

使用Loader去load一个swf:

var fileURL:String = “assets/test.swf”
var swfLoader:Loader = new Loader();
swfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE swfLoaded);
swfLoader.load(new URLRequest(fileURL));

function swfLoaded(evt:Event):void{
addChild(swfLoader);
}


这些是加载外部swf在AS3.0中最基本的代码,如果你在舞台上有一个按钮点击时去调用 swfLoader.unload(),按道理的话应该会把加载到swfLoader里面的test.swf给清除。

问题产生: 如果test.swf中包含声音,则会出现调用unload方法后声音还是存在。

通常情况下会怀疑自己的代码是不是有问题,或者还是别的什么。。。但是即使在最简情况下也出现这样的问题,那就要追寻缘由了。在网上找了很多相关的文章,大部分都给了这个链接: http://www.gskinner.com/blog/archives/2008/04/failure_to_unlo.html gskinner,很强的团队,以后再介绍了。里面体介绍了问题出现的情况。

unload是flash player9的一个bug,出现的情况就是flash player无法回收 loader中load的元件,unload做的工作只是将load的元件移除Loader的display list(显示列表)。而只要load的swf中包含复杂的代码,或者说有任何事件侦听代码就无法使将其回收,当然也就无法回收他占用的内存。如果有大量的加载的话很有可能让程序崩溃。然而如果swf中有声音更是直接影响。总不能停止所有声音吧。

解决方法:

读gskinner的那篇文章,你会发现他并没有直接给出解决方法,只有一些建议。读了评论你会发现更是有意思,开始大部分是夸奖,到了后来却很多是抱怨,说什么只是谈,没有解决方法阿什么的,而且会发现没人说自己顺利解决了问题。看样子真是一个很大的bug。从我个人来说我试了其中的一些方法,也没有成功。但是其中有一种方法值得我们研究,叫“GC“,垃圾回收机制强行执行,有两篇文章可以参考:http://bbs.actionscript3.cn/thread-234-1-1.html 还有就是:http://www.ultrashock.com/forums/random-chat/failure-to-unload-flash-player-9s-dirty-secret-99237.html

主要代码:

package ...
{
import flash.display.Loader;
import flash.net.LocalConnection;
public class CustomLoader extends Loader
{
override public function unload():void
{
super.unload();
try
{
new LocalConnection().connect( "FORCE_GC" );
new LocalConnection().connect( "FORCE_GC" );
}
catch( err:Error )
{}
}
}
}


我试了,虽然没有成功,但是很有启发,就是使得内部抱错,然后让flash的垃圾回收机制去回收,那样就达到了清除的目的。值得研究。

我个人的解决方法:

1、如果你愿意接受失去flash player 9.0用户的风险,你可以使用adboe在flash player 10中新发布的api,Loader.unloadAndStop,可以说是对于9.0这个bug的一个郑重的补救,详细使用可以参考:http://kb.adobe.com/selfservice/viewContent.do?externalId=kb403670&sliceId=2
#

2、如果你用过AS2.0你会发现2.0中也有一个类似的这样的方法,加载使用的是loadMovie 移除用的方法叫做:unloadMovie, 而且没有像AS3.0这样的bug。由于我在给新浪做广告播放器,由于公司不可能冒险无法清除内容出错(如果用户没有flash palyer 10),所以可以接收的解决方法是有音频的广告swf使用2.0语言来发布。而我这边开发端的方法是这样:创建一个广告swf加载容器(AS2.0语言发布)专门用于加载带声音的swf,这样可以使用unloadMovie来实现无bug移除。而对于“swf加载容器”与主容器(AS3.0语言发布)的通信,则可以通过 LocalConnection 来实现两种不同虚拟机的flash版本文件之间通信,详细代码参考以下帮助文档吧(位置: Programming Actionscript 3.0 Networking and communication >Connecting to other Flash Player instance )
分享到:
评论

相关推荐

    FairyGUI-Unity-Plugin-3.4.0.zip

    - NEW: Add UIPackage.UnloadAssets and UIPackage.ReloadAssets to allow unload package resources without removing the package. - NEW: Add TransitionActionType.Text and TransitionActionType.Icon. 2.4.0...

    Linux 内核升级到2.6.18成功笔录

    * Loadable Module support 选项中,一定要选上 “Module unloading” 和 “Automatic kernel module loading” 这两项。 * Processor type and features 选项中,一定要选上 “Preemptible Kernel”。 * Device ...

    mysql集群配置 txt格式

    unloading iptables modules: [OK] ``` ### 四、目录结构与权限设置 #### 1. 创建目录 - `/var/lib/mysql`: 用于存放MySQL相关文件。 - `/var/lib/mysql-cluster`: 用于存放集群相关文件。 - `/var/lib/mysql/data...

    EurekaLog_7.5.0.0_Enterprise

    This option will switch from fast-methods to slower methods, but which take less memory. Use 0 (default) for small projects, use 1 for large projects (if ecc32 runs out of memory). 2)....Added: --el_...

    多元个性化需求驱动的最后一公里配送选址-路径研究.pdf

    6. Vehicle routing problem of refined oil secondary distribution considering unloading sequence constraints. 控制与决策. 2020, 35(12): 2999-3005. 关键词:最后一公里配送;个性化需求;选址-路径问题;...

    oracle truncate恢复

    SQL*Loader: Release 9.2.0.8.0 - Production on 星期日 3月 15 15:13:56 2009 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. 达到提交点,逻辑记录计数6502 ... ``` #### 结论 通过...

    java类加载机制原理与实现

    7. 卸载(Unloading):垃圾回收器将无用的类卸载出 JVM,以释放资源。 在 Java 中,类加载器是负责加载类的组件。Java 中有三种类型的类加载器: 1. 启动类加载器(Bootstrap ClassLoader):负责加载 Java 的...

    阿里巴巴面试题总结

    7. **卸载(Unloading)**: - 当对象不再被引用或者满足其他特定条件时,JVM可能会卸载类。 - 类卸载不常见,通常由垃圾回收器在特定情况下触发。 #### 二、Java类加载器及其作用 Java中有三种基本的类加载器:...

    ASP.NET 生命周期 整理讲义

    5. **卸载 (Unloading)**:页面被卸载前的最后阶段。 #### ASP.NET 编译概述 ASP.NET 使用动态编译技术来提高应用程序的性能和灵活性。当 ASP.NET 遇到一个新的页面或用户控件时,它会自动将其编译成托管代码,并...

    工具_Rc522_GameGuard_limit_

    Unloading modules: [ OK ][root@localhost ~]# cd /home/login./ls_up[root@localhost login]# ./ls_up[NP] [C$][S lib] Fail to load GGVer Limit at file(./gameguard/csver.cfg). Disabled GGVer limitation....

    虚拟机 VMware上 red hat Linux 9 内核升级

    - 在 “Loadable Modules support” 中,选择 “Module unloading” 和 “Automatic kernel module loading”。 - 在 “Device Drivers” → “Block Devices” 中,选择 “Loopback device support”。 - 在 ...

    vxbus_device_driver_developers_guide_6.9

    PART I: VXBUS FUNDAMENTALS 1 Getting Started with Device Driver Development .................................... 3 1.1 About Device Drivers ...............................................................

    Java虚拟机----类的加载过程.docx

    类的生命周期还包括使用(Using)和卸载(Unloading)。使用阶段是类被实际使用的过程,而卸载则发生在JVM内存资源紧张时,不再被任何线程引用的类可能会被卸载。 类加载器在类加载过程中起着关键作用,它们遵循...

    JSP博客源码以及文档

    5. **清理与卸载(Cleanup & Unloading)**: 当Servlet不再使用时,执行`destroy()`方法,然后被Web容器卸载。 **SQL Server 2000数据库** SQL Server 2000是微软推出的关系型数据库管理系统,广泛应用于企业级...

    linux内核升级教程

    2. **Module unloading**:支持卸载模块。 3. **Automatic kernel module loading**:自动加载内核模块。 4. **Loopback devices support**:支持环回设备。 5. **Device mappers support**:支持设备映射器。 6. **...

    Plant Simulation应用教程[周金平][程序源代码]

    "IE_Simulation.spp"可能涉及内部物流系统,而"Machine Hand Loading Unloading.spp.bak"可能关于机器人臂的装卸操作。 6. **自定义图标和对象**:"MyIcons.obj"可能包含用户自定义的图形元素,用于个性化模型展示...

    Linux内核升级全过程

    - Loadable Modules support:必须选中,同时启用 Module unloading 和 Automatic kernel module loading。 - Device Drivers -> Block Devices:确保选中 Loopback devices support。 - Device Drivers -> Multi-...

    (整理版)英汉化工工程图解词汇-配管.docx

    8. 燃料或液体原料卸料区(Fuel or Liquid Raw Material Unloading Area):接收和处理原料的地方。 9. 加油站(Filling Station):为工厂设备加油的设施。 10. 食堂预留地(Future Cafeteria):未来可能建设的...

    Linux kernel内核升级全过程

    * Loadable Module support 中选择“Module unloading”和“Automatic kernel module loading”。 * Device Drivers ---> Block Devices 中选择“Loopback device support”。 * Device Drivers ---> Multi-device ...

    TJU-计科数据库实验(物流数据库ER模型与关系模型转换)

    运单有编号(id)、货物名称(goods_name)、装货地址(loading_addr)、卸货地址(unloading_addr)、运费(freight)、下单时间(order_time);报价有报价时间(bid_time)、价格(price)。 - 关系:一个货主可以发布多个运单,...

Global site tag (gtag.js) - Google Analytics