flash的动态加载技术
这里所说的动态加载技术, 主要是指代码模块(可以是swc也可以是swf)的动态加载。即主swf在运行的时候, 可以根据需要动态加载所需的代码模块。
为了讨论方便, 下面所说的代码模块都用swc表示,用以与主swf的区分。 因为swc实际是swf + xml + 文件夹的一个压缩包, 所以动态加载swc比动态加载swf只多了一个步骤, 即解压的过程。
这里有一个常识, 如果是在fb中或其他as开发环境中开发, 一个主swf工程如果想引用一个swc库, 那么必须在主swf工程中引用swc库本身或者直接包含swc所对应的工程,而这种引用都有两种方式:
Merged into code,即把所需的swc中的代码在编译时编译到主swf里。
External, 不会把所需的swc中的代码在编译时编译到主swf里。
动态加载技术则需要采用External这种方式引用swc, 这里引用只是告诉编译器可以找到所用到的代码(类), 但是不会把实际的代码编译到swf中, 所以如果在运行swf时, 如果不在合适的时机加载的swc, 就会报找不到某个类的运行时错误。错误信息类似于:
VerifyError: Error #1014: 无法找到类 test.swc::BaseEntity。
假设模块间的引用如下图:

其中模块间的虚线代表外部引用, 实线代表嵌入式引用。
BaseEntity是定义在ExternalSwc中的一个类, Entity继承于BaseEntity, EntityProxy引用到BaseEntity, 后两者可以根据需要定义在Client或者EmbededSwc中。
这里提及的对象间的引用, 比如EntityProxy引用到BaseEntity, 主要是指下述三种情况:
1、BaseEntity作为EntityProxy的成员变量。
2、BaseEntity作为EntityProxy的成员函数的参数。
3、BaseEntity在EntityProxy的成员函数中作为局部变量。
对于BaseEntity定义在ExternalSwc中的类, 在Client和EmbededSwc中只能发生第3种引用方式, 否则会报错。
对于Entity这种直接继承与BaseEntity的类, 且是定义在Client或者EmbededSwc中。如果在Client中被引用到, 那么无论Entity是位于Client还是位于EmbededSwc中(也就是最终Client中会包含Entity的代码), 都会报如下类似错误:
VerifyError: Error #1014: 无法找到类 Entity。
原因在于虽然Client包含Entity的代码, 却没有包含Entity的基类代码, 而flash player在运行Client的时候首先会对Client的代码做初步的验证。
对于EntityProxy这种引用到BaseEntity的类, 如果在Client中被引用到, 那么它是位于Client还是位于EmbededSwc中稍微有点区别。
如果是位于Client中, 则EntityProxy只能发生第3种引用方式, 否则会报错。
如果是位于EmbededSwc中, 则可以发生上述任意一种引用方式。
为什么有上述区别, 原因尚不清楚, 难道这时候flash player不是把编译好的Client和EmbededSwc的代码看作一个整体。
flash的动态加载技术的更多相关文章
- 插件化开发—动态加载技术加载已安装和未安装的apk
首先引入一个概念,动态加载技术是什么?为什么要引入动态加载?它有什么好处呢?首先要明白这几个问题,我们先从 应用程序入手,大家都知道在Android App中,一个应用程序dex文件的方法数最大不能超 ...
- 【转】Android类动态加载技术
http://www.blogjava.net/zh-weir/archive/2011/10/29/362294.html Android应用开发在一般情况下,常规的开发方式和代码架构就能满足我们的 ...
- Android动态加载技术初探
一.前言: 现在,已经有实力强大的公司用这个技术开发应用了,比如淘宝,大众点评,百度地图等,之所以采用这个技术,实际上,就是方便更新功能,当然,前提是新旧功能的接口一致,不然会报Not Found等错 ...
- classLoader动态加载技术
//加载器,apkPath为包含dex文件的.apk或jar路径,dexPath是优化后的dex文件路径,第三个表示libraryPath表示Native库的路径,最后是父类加载器 DexClassL ...
- 【Android编程实战】源码级免杀_Dex动态加载技术_Metasploit安卓载荷傀儡机代码复现
/文章作者:MG193.7 CNBLOG博客ID:ALDYS4 QQ:3496925334/ 在读者阅读本文章前,建议先阅读笔者之前写的一篇对安卓载荷的分析文章 [逆向&编程实战]Metasp ...
- Android动态加载技术(插件化技术)
No1: 插件化技术的好处: 1)减轻应用的内存和CPU占用 2)实现热插拔,即在不发布新版本的情况下更新某些模块 No2: 插件化方案必须要解决三个基础性问题:资源访问.Activity生命周期的管 ...
- js 页面图片等元素在普通元素中滚动动态加载技术
/*! * 2012-01-13 v1.1 偏移值计算修改 position → offset * 2012-09-25 v1.2 增加滚动容器参数, 回调参数 * 2015-11-17 v1.3 只 ...
- Android 插件技术:动态加载dex技术初探
1.Android动态加载dex技术初探 http://blog.csdn.net/u013478336/article/details/50734108 Android使用Dalvik虚拟机加载可执 ...
- liteos动态加载(十三)
1. 概述 1.1 基本概念 动态加载是一种程序加载技术. 静态链接是在链接阶段将程序各模块文件链接成一个完整的可执行文件,运行时作为整体一次性加载进内存.动态加载允许用户将程序各模块编译成独立的文件 ...
随机推荐
- ECSHOP 用户中心 我的订单前台显视订单每张商品图片及收货人
先在网站根目录打开文件 includes/lib_transaction.php 查找代码 $sql = "SELECT order_id, order_sn, order_status, ...
- LightOj 1220 - Mysterious Bacteria (分解质因子x=b^p 中的 x 求最大的 p)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1220 题意:已知 x=bp 中的 x 求最大的 p,其中 x b p 都为整数 x = ...
- entity.Student@150f3932, entity.Student@1a740c6b 没有实体中的数据
public class AppServerAction extends BaseAction { /** * */ /** * 初始化 “我的产品”列表 JSP页面 ...
- 【转】给npm设置代理
可以运行如下两句命令设置代理,注意代理的地址改为自己实际可用的代理. npm config set proxy=http://127.0.0.1:8087 npm config set registr ...
- jq数组,得到遍历生成的id后面的id
//商品选择完成跳转到提交订单页面 function orderDetails(){ var shopCarIds = [];//存放商品的数组 var objs = []; objs = $(&qu ...
- MVC中的JS和CSS压缩
小说一下Js和CSS压缩的好处: 1.减小了文件的体积 2.减小了网络传输量和带宽占用 3.减小了服务器的处理的压力 4.提高了页面的渲染显示的速度 很多建议将站点的静态文件(如图片.js.css ...
- 记录一下我使用的vim的配置文件
还不是很完美: "au BufReadPost * if line("'\"") > 0|if line("'\"") &l ...
- 关于OpenGL的性能方面的技巧(不时更新)
显示列表可以有效提高渲染性能渲染顺序顶点层次分配内存管理递归查找 在有引擎的情况下,同一个模型对象会使用同一份内存和显存 优化裁剪算法,去掉无需渲染的对象 纹理阴影比体阴影效率要高 尽量使用UVW贴图 ...
- MVC4 Filter 验证客户端访问类型(移动端、PC端)
Filter: 1 /// <summary> /// 检测是否是手机访问 /// </summary> public class IsMobileFilter : Actio ...
- android混合开发,webview的java与js互操作
android原生应用,用webview加载应用中的网页,并且java代码与js代码可以互相操作. 这是混合开发的基石,最基本也最重要的东西,实验代码在这里. 概括说说—— java调js:调用web ...