使用ModuleManager载入模块

47 篇文章 0 订阅

                                                          使用ModuleManager载入模块

                                                          from:http://www.code-design.cn/bblog20-page1.html

22.8.1.问题
我想具体控制模块的加载和卸载。
22.8.2.解决办法
直接访问ModuleManager类的方法来监听加载模块的各种状态事件。
22.8.3.讨论
ModuleManager 类管理着加载的模块。当调用ModuleLoader.loadModule 和ModuleLoader.unloadModule方法时<mx:ModuleLoader>组件内部就是和这个管理器进行着通信, 你可以直接访问ModuleManager 管理的模块。当模块的URL 传递给ModuleManager.getModule方法后,这个模块位置被添加到模块的管理列表中,返回一个
mx.modules.IModuleInfo类实例。

模块实际上是ModuleMananger的私有ModuleInfo类实例。ModuleInfo对象加载SWF文件,包装为实现了IModuleInfo的代理类,并通过ModuleManager.getModule方法返回实例对象。你可以监听这个代理的各种状态事件以便具体控制模块的加载。

下面的例子演示如何使用ModuleManager控制模块的显示:

+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxmllayout="vertical"
creationComplete="creationHandler();">

<mx:Script>
<![CDATA[
import mx.events.ModuleEvent;
import mx.modules.ModuleManager;
import mx.modules.IModuleInfo;
private  var _moduleInfo:IModuleInfo;
private  function creationHandler(): void {
_moduleInfo = ModuleManager.getModule(  'ContactList.swf' );
_moduleInfo.addEventListener( ModuleEvent.READY, moduleLoadHandler );
_moduleInfo.load();
}
private  function moduleLoadHandler(evt:ModuleEvent ): void {
canvas.addChild( _moduleInfo.factory.create() as DisplayObject );
}

]]>
</mx:Script>
<mx:Canvas id="canvaswidth="500height="500" />
</mx:Application>


当应用程序完成布局初始化操作后,通过ModuleManager.getModule方法加载ContactList模块并返回的IModuleInfo对象。当下载模块时IModuleInfo的实现扮演着Loader实例的代理。

当模块成功下载后,使用IFlexModuleFactory.create方法添加到显示列表。这个方法返回模块的实例对象,类型被映射为DisplayObject,添加到Canvas容器的显示列表。

Y通过getModule方法返回的IModuleInfo对象,你可以监听模块的各种下载状态事件。这个例子中,应用程序直到模块完全下载后才添加到显示列表,触发的事件类型为ModuleEvent,SWF模块的下载状态有progress到error等几个状态(Table 22-1)。

IModuleInfo 实现类的unload方法用于删除ModuleManager中的模块引用,但是不会删除显示列表中的SWF。要删除显示列表中的模块,你必须显示调用父对象的removeChild方法。

相比较之下ModuleLoader类根据url属性的更新去加载模块,而getModule方法返回的IModuleInfo实现类可以更好控制模块的加载和显示。这可以使你能预先加载模块,在与用户交互中能立即显示,缩短请求和渲染模块时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android模块化设计思想是将整个项目按照业务模块进行逻辑的划分,将不同的业务模块拆分成独立的模块,每个模块都有自己的功能和职责,可以独立开发、测试、编译和部署。这种设计思想可以提高应用的可维护性、可扩展性和可重用性,同时也可以提高开发效率和团队协作效率。 Android模块化设计思想的实现方式有很多种,其中比较常见的方式包括: 1.组件化(Componentization):将整个应用拆分成多个独立的组件,每个组件都有自己的功能和职责,可以独立开发、测试、编译和部署。组件之间通过接口进行通信,可以灵活组合和替换,从而实现应用的灵活性和扩展性。 2.插件化(Plug-in):将应用的某些功能或模块以插件的形式动态加载到应用中,从而实现应用的动态扩展和更新。插件化可以提高应用的灵活性和可扩展性,但也会增加应用的复杂度和安全风险。 3.模块化(Modularization):将整个应用按照业务模块进行逻辑的划分,将不同的业务模块拆分成独立的模块,每个模块都有自己的功能和职责,可以独立开发、测试、编译和部署。模块之间通过接口进行通信,可以灵活组合和替换,从而实现应用的可维护性、可扩展性和可重用性。 下面是一个Android模块化设计的例子: ```java // 定义一个公共接口 public interface IModule { void doSomething(); } // 定义一个模块A public class ModuleA implements IModule { @Override public void doSomething() { // 实现模块A的功能 } } // 定义一个模块B public class ModuleB implements IModule { @Override public void doSomething() { // 实现模块B的功能 } } // 定义一个模块管理器 public class ModuleManager { private static Map<String, IModule> sModules = new HashMap<>(); public static void registerModule(String name, IModule module) { sModules.put(name, module); } public static IModule getModule(String name) { return sModules.get(name); } } // 在应用启动时注册模块 ModuleManager.registerModule("moduleA", new ModuleA()); ModuleManager.registerModule("moduleB", new ModuleB()); // 在应用中使用模块 IModule moduleA = ModuleManager.getModule("moduleA"); if (moduleA != null) { moduleA.doSomething(); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值