原文地址:http://riaoo.com/?p=1405

博客园的下载地址(版权归原作者) http://files.cnblogs.com/tianlanliao/CustomRSL.zip

创建运行时共享库(Runtime Shared Library,RSL)并不是什么难事也不是新鲜事了,就是把类定义放到一个swf文件里,其它swf文件在运行时可以共享那些类定义。这样可以防止类定义重复从而减小文件大小。RSL有分带Adobe签名的(例如 Flex framework),也有用户自创建的。带Adobe签名的RSL,假如是swz格式,则可以永久保存在客户端计算机的特定目录下(例如 C:\Documents and Settings\Administrator\Application Data\Adobe\Flash Player\AssetCache)。用户创建的,通常只能是swf格式,只能保存在缓存里。接下来你可以先下载源码看一看,然后继续往后阅读。

下载Flash Builder项目CustomRSL

如上图所示,我在Flash Builder里创建了一个ActionScript 项目,cn.riahome.module 包里的“Libs_RSL.as”已构建为项目的模块,它将被编译为独立的 Libs_RSL.swf 文件(要构建某个*.as文件作为模块,只需“属性->ActionScript 模块->添加”)。这个 Libs_RSL.swf 文件将会存放 cn.riahome.classes 包里所有的类的定义,包括 Adobe 类、Microsoft 类和Sun 类。默认包里的主文件 CustomRSL.as 不需要包含这些类定义(就是不需要 import 那些类),从而减小编译后的 CustomRSL.swf 文件大小。

CustomRSL 类如何使用那些没有 import 的类呢?方法也很简单,只需要把已包含那些类定义的 Libs_RSL.swf 文件加载到 CustomRSL.swf 里,再利用getDefinitionByName()方法取得那些类的引用。注意:加载 Libs_RSL.swf 文件时,必须指明它的应用程序域和CustomRSL.swf的一样,即在加载时,传递给Loader.load()方法的第二个参数为 ApplicationDomain.currentDomain 。关于ApplicationDomain 类的使用,请查看官方的《Adobe ® ActionScript® 3.0编程

说白了,就是把类定义划分到别的 swf 文件里,在需要时加载这个 swf 文件,再利用“反射”取得类的引用。不过,值得特别注意的是:这种方法不易于对加载进来的swf进行垃圾回收。除非你加载了swf文件后,并没有引用过里面的东西,否则整个swf都不会被垃圾回收。

其实,假如你熟悉AS3的“反射”,了解 ApplicationDomain 类,并且对 Loader 类了如指掌,那么你能实现的功能远不止这些。

[转]就这样,创建了自己的运行时共享库(RSL)的更多相关文章

  1. 此编译单元不包含在frame元数据中指定的factoryClass,无法加载配置的运行时共享库

    警告:此编译单元不包含在frame元数据中指定的factoryClass,无法加载配置的运行时共享库.要在没有运行时共享库的情况下进行编译,请将 -static-link-runtime-shared ...

  2. 运行时动态库:not found 及介绍-linux的-Wl,-rpath命令

    ---此文章同步自我的CSDN博客--- 一.运行时动态库:not found   今天在使用linux编写c/c++程序时,需要用到第三方的动态库文件.刚开始编译完后,运行提示找不到动态库文件.我就 ...

  3. 转: gcc 指定运行时动态库路径

    gcc 指定运行时动态库路径 Leave a reply 由于种种原因,Linux 下写 c 代码时要用到一些外部库(不属于标准C的库),可是由于没有权限,无法将这写库安装到系统目录,只好安装用户目录 ...

  4. Linux 指定运行时动态库路径【转】

    转自:http://www.cnblogs.com/cute/archive/2011/02/24/1963957.html 众所周知, Linux 动态库的默认搜索路径是 /lib 和 /usr/l ...

  5. 拎壶学python3-----(5)pycharm解决运行时少库的问题

    有时候我们运行的时候会出现如下现象 no module named requests怎么办呢? 点击设置: 安装成功后会显示如下: 怎么进行安装呢? 然后退出再运行: 发现已经没有缺少requests ...

  6. Java 9 揭秘(7. 创建自定义运行时映像)

    Tips 做一个终身学习的人. 在第一章节中,主要介绍以下内容: 什么是自定义运行时映像和JIMAGE格式 如何使用jlink工具创建自定义的运行时映像 如何指定命令名称来运行存储在自定义映像中的应用 ...

  7. 框架原理第三讲,RTTCreate,运行时类型创建.(以MFC框架讲解)

    框架原理第三讲,RTTCreate,运行时类型创建.(以MFC框架讲解) 通过昨天的讲解,我们已经理解了运行时类型识别是什么. 比如  CObject * pthis = (Cobject *)Cre ...

  8. Qt 共享库(动态链接库)和静态链接库的创建及调用

    前言: 编译器 Qt Creator, 系统环境 win7 64 位 1.创建共享库: 新建文件或项目->选择 Library 和 c++ 库->选择共享库->下一步(工程名为 sh ...

  9. linux 运行时加载不上动态库 解决方法(转)

    1. 连接和运行时库文件搜索路径到设置     库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的.一般 Linux 系统把 /lib 和 /usr ...

随机推荐

  1. Server Library [Apache Tomcat v6.0](unbound)服务未绑定解决办法

    (1) 单击File按钮---钩选Show AllWizard——>选择Server——>单击Next (2)Add Library    选择 WTP Server Runtime(My ...

  2. [你必须知道的.NET]第三十三回,深入.NET 4.0之,Lazy<T>点滴

    发布日期:2009.10.29 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 对象的创建方式,始终代表了软件工业的生产力方向,代表了先进软件技 ...

  3. 机器学习之逻辑回归(Logistic Regression)

    1. Classification 这篇文章我们来讨论分类问题(classification problems),也就是说你想预测的变量 y 是一个离散的值.我们会使用逻辑回归算法来解决分类问题. 之 ...

  4. spring_150802_resource

    接口Service: package com.spring.service; public interface DogPetService { public void queryAllDogPets( ...

  5. C#打开得到路径

    FolderBrowserDialog path = new FolderBrowserDialog(); path.ShowDialog(); MessageBox.Show(path.Select ...

  6. 一站式学习Wireshark(五):TCP窗口与拥塞处理

    https://community.emc.com/message/821593#821593 介绍 TCP通过滑动窗口机制检测丢包,并在丢包发生时调整数据传输速率.滑动窗口机制利用数据接收端的接收窗 ...

  7. Hadoop基础教程之HelloWord

    上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello Word. OK,我们先来看一下当时在命令行里输入的内容: ...

  8. Java学习笔记之:Java 定时任务

    一.介绍 在应用里经常都有用到在后台跑定时任务的需求.比如网络运营商会在每个月的一号对数据进行一次统计.在java中我们可以继承timertask类来实现定时任务. 二.笔记 /** * 定时任务 * ...

  9. 【web性能】 JS、CSS的合并、压缩、缓存管理

    本篇文章主要讨论下目前JS,CSS 合并.压缩.缓存管理存在的一些问题,然后分享下自己项目中用到的1个处理方案,并提供1个实例下载.   存在的问题: 合并.压缩文件主要有2方面的问题: 1. 每次发 ...

  10. Android 广播机制(两种注册方法)与中断广播

    两种注册类型的区别是: 1)第一种不是常驻型广播,也就是说广播跟随activity的生命周期.注意: 在activity结束前,移除广播接收器. 2)第二种是常驻型,也就是说当应用程序关闭后,如果有信 ...