Tag Archive: robotlegs


RobotGaiaAnt Demo

我在再谈Gaia结合Robotlegs进行开发一文中提到的视图接口注入方法,在Robotlegs更新到1.4版本以后就失效了。问题出在以下这行代码:

mediatorMap.mapView(IModule, ModulePageMediator, IModule);

在新版的Robotlegs下并不会生成对应的Mediator。经过一番研究后发现要改写MediatorMap才行,幸好已经有人开发出了ViewInterfaceMediatorMap插件,省了我很多工作。这个插件使用很简单。用以下代码来覆盖掉默认的mediatorMap就可以支持视图的接口注入了:

override protected function get mediatorMap():IMediatorMap
{
	return _mediatorMap ||= new ViewInterfaceMediatorMap(contextView, createChildInjector(), reflector);
}

我已经将该插件包含到RobotGaiaAnt 0.7的更新中,同时提供了一个简单的例子来演示这套框架的运行情况:RGADemo

这个例子包含了两个页面HomeMember。其中Home是一个通常的简单页面,而Member页面继承了ModulePage,是作为一个Robotlegs模块存在,包含独立的MemberContext

override public function set parentInjector(value : IInjector) : void
{
	super.parentInjector = value;
 
	context = new MemberContext(this, false, value, loaderInfo.applicationDomain);
}

我们可以在初始化的时候就自动启动Context。也可以选择在transitionIn()函数执行的时候再启动,这样能够引用到这个页面下包含的各项资源。但是在本例中两种启动时机都可以。

View full article »

RobotGaiaAnt 0.7

RobotGaiaAnt又迎来了一次较大的更新。本次升级主要有两个重点:一是Robotlegs升级到1.4版本以后,以前的框架采用的视图注入方法不兼容了。经过一番研究后,我找到了ViewInterfaceMediatorMap扩展,可以完美实现视图的接口注入。具体的细节将在下一篇描述。 二是FDT4.o以后增加了swf发布的设置文件和更好的Ant任务支持,RobotGaiaAnt将其整合,进一步简化工作。

首先我们来看项目的配置更新。和以前的版本一样:建立项目,复制必要的文件到项目目录下。然后对gaia.properties文件进行设置:

View full article »

在今年3月份的一组文章中,我探讨了Gaia网站框架结合Robotlegs的MVC开发方式。这套机制在接下来半年的项目中运行良好,也积累了一些实战经验。但是自从用上了FDT4的Profiler功能以后,就发现了这套框架下存在的内存泄漏问题。一般的Agency/Studio网站页面较少,也不会有较长时间的停留时间和大量的加载卸载,问题还不甚明显。但是一旦项目规模上去以后,这种问题就越显严重。在今年奔驰车展网站制作触摸屏版本的时候就发生了播放器频繁出错退出的情况。排查了很久,初步确定是使用Robotlegs的viewMap.mapView()造成的问题,于是在GitHub上提交了任务单

在接下来的三个月内,我一有时间就思考这个Bug的来源。仔细研究了Gaia和Robotlegs源代码,又借鉴了Robotlegs模块扩展和另一个基于Robotlegs的网站框架HandBones的模块化思想,终于完美解决了这个问题。

首先我先排查了Gaia框架自身的内存泄漏问题。通过Profiler的调试,我发现Page实例在卸载后仍然驻留在内存中。也就是说Gaia框架本身就存在内存泄漏的问题。仔细阅读Gaia的代码后,发现问题出在对loaderContext的处理上。Gaia框架很好的处理了卸载swf可能造成内存泄漏的问题,却唯独遗漏了这个小地方:loaderContext对象会持有对被加载内容的引用。由于Gaia框架卸载loader的内容后,并没有清空loaderContext,所以被加载内容也就没法被垃圾回收。问题找到了,解决方法就很简单。在卸载的同时设置loaderContext=null就可以了。我已经向Gaia论坛提交了这个Bug,并且得到了作者Steven Sacks的肯定回复。官方的修正版本应该不久就能出来了。

View full article »

Powered by KevinCao.com ©2010 | Platform: WordPress | Theme: Motion
kevincao.com