Flex实际复杂项目中RSL(运行时共享库)的使用方法

http://flash.9ria.com/thread-42672-1-1.html

Flex实际复杂项目中RSL(运行时共享库)的使用方法

http://www.puxiao.com/?p=463

最近连着看了关于RSL的文章,我也说说我现在认识的RSL。
Y.Boy 的 创建自己的RSL
Aedis.Ju 的 动态加载 Application

关于AS里的RSL机制以及好处我就不说了,我说说复杂项目中的使用方法。
算是对他们文章的一个补充延伸吧。

我准备说的使用RSL方法,简单的说就是:事情分两步走
(1)flex 编写代码的时候:使用设置为不嵌入代码的.swc类库
(2)swf 运行的时候:加载包含模块、类、代码、嵌入图片 、声音等资源的.swf文件


-------------------
如果你明白我上面的意思,并且在心里想说:我早就是这样做的!
呵呵,那也不需要再往下面看了^-^
---------------------------

<一>使用swf作为类库,常用方法存在的问题
先说说上面两位文章里讲的使用方法(以Y.Boy里的代码为例):
// 获得类引用
var Adobe Class:Class = getDefinitionByName("cn.ria home.class es::Adobe") as Class;
// 新建实例
var adobe:* = new AdobeClass();

简单的项目可以这样做,相对复杂点的项目,比如多个模块开发 ,这样做就存在问题了:
1 想获得类引用,必须知道并且写正确类的命名空间以及类的类名
(写起来肯定麻烦,并且你拼写错了,编译 器也不会报错,只有当运行的时候才会发现)

2 新建实例只能通过new 的方式,某些实现单例的方式就不能用
(如果AdobeClass类是单例,你想获得单例,你写AdobeClass.getInstance()编译器就报错了)  

3 编写代码时没有代码提示,用起来麻烦。

并且还有...此出省略一万五千字


<二>介绍RSL类库的新使用方法

(1) 先获得RSL的源材料:swc和swf 1 把你的类、资源等做成swc(或者是别人开发的swc)
最简单的方法是Flex里新建Library project工程

2 新建一个as工程,就一个任务:引入刚才制作好的swc的各个类及资源
发布这个工程,获得swf

(2) 编写项目模块(ActionScript Modules)代码时使用swc

1 在你的项目里,设置项目属性,添加外部库路径,把得到的swc添加进来
Properties -> ActionScript Build Path -> Library path -> add SWC

2 设置swc的连接类型为外部 (这是最重要的一步)
点刚才加入的swc前面的'+'号,双击 Link Type: Merged into code 这一项,在弹出的窗口中,将Link Type设置成External。


这样设置swc,你编写代码的时候,你的类,你的资源,就可以像正常导入进来一样,自由使用。
编写的时候也有代码提示,甚至你的代码里都出现了 import cn.riahon.classes.Adobe,类不管是什么随便用,但在发布的时候却不会把这个类以及swc里所有的资源类编译进去。
(发布的时候其实不存在这些类,可以理解成暂时性的“欺骗”了flash )

(3) 运行时加载swf获得类库
主swf运行的时候,使用Loader加载包含类库的 swf Libs文件(第一步得到的那个swf),从而引入libs里的类。
你可以觉定加载的类库所放入的作用域ApplicationDomain,以便在不用的时候可以把加载的类给删除掉。

加载完swf以后(Event.INIT事件 后),你就可以使用这个各个类。
如果是模块开发,这个时候可以再去加载使用到这些类的模块。
(总之,一定确保在没有加载完之前千万不要使用)

<完> 我说的使用方法就是这样了

-----------------------------------
说明:以上绝非我自己发现的方法,好多“仙人”都已经这样用了...
我是怎么知道的?翻看《ActionScript3 编程精髓》的第767页以及同事 张成亮 给我讲的。

你可能感兴趣的:(编程,Flex,Flash,Adobe,actionscript)