`

flex 高级知识

阅读更多

一.简述Flex内存释放优化原则。什么情况会发生内存经泄露,一旦有内存泄露,你会如何解决?

FLEX内存释放优化原则:
1. 被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉;
2. 父对象内部的子对象被外部其他对象引用了,会导致此子对象不会被删除,子对象不会被删除又会导致了父对象不会被删除;
3. 如果一个对象中引用了外部对象,当自己被删除或者不需要使用此引用对象时,一定要记得把此对象的引用设置为null;
4. 本对象删除不了的原因不一定是自己被引用了,也有可能是自己的孩子被外部引用了,孩子删不掉导致父亲也删不掉;
5. 除了引用需要删除外,系统组件或者全局工具、管理类如果提供了卸载方法的就一定要调用删除内部对象,否则有可能会造成内存泄露和性能损失;
6. 父对象立刻被删除了不代表子对象就会被删除或立刻被删除,可能会在后期被系统自动删除或第二次移除操作时被删除;
7. 如果父对象remove了子对象后没有清除对子对象的引用,子对象一样是不能被删除的,父对象也不能被删除;
8. 注册的事件如果没有被移除不影响自定义的强行回收机制,但有可能会影响正常的回收机制,所以最好是做到注册的事件监听器都要记得移除干净。
9. 父对象被删除了不代表其余子对象都删除了,找到一种状态的泄露代码不等于其他状态就没有泄露了,要各模块各状态逐个进行测试分析,直到测试任何状态下都能删除整个对象为止。

内存泄露情况:

1. 引用泄露:对子对象的引用,外部对本对象或子对象的引用都需要置null;
2. 系统类泄露:使用了系统类而忘记做删除操作了,如BindingUtils.bindSetter(),ChangeWatcher.watch()函数时候完毕后需要调用ChangeWatcher.unwatch()函数来清除引用 ,否则使用此函数的对象将不会被删除;
类似的还有MUSIC,VIDEO,IMAGE,TIMER,EVENT,BINDING等。
3. 效果泄露:当对组件应用效果Effect的时候,当本对象本删除时需要把本对象和子对象上的Effect动画停止掉,然后把Effect的target对象置null; 如果不停止掉动画直接把 Effect置null将不能正常移除对象。
4. SWF泄露:要完全删除一个SWF要调用它的unload()方法并且把对象置null;
5. 图片泄露:当Image对象使用完毕后要把source置null;(为测试);
6. 声音、视频泄露: 当不需要一个音乐或视频是需要停止音乐,删除对象,引用置null;

内存泄露解决方法:
1. 在组件的REMOVED_FROM_STAGE事件回掉中做垃圾处理操作(移除所有对外引用(不管是VO还是组件的都需要删除),删除监听器,调用系统类的清除方法)
先remove再置null, 确保被remove或者removeAll后的对象在外部的引用全部释放干净;
2. 利用Flex的性能优化工具Profile来对项目进程进行监控,可知道历史创建过哪些对象,目前有哪些对象没有被删除,创建的数量,占用的内存比例和用量,创建过程等信息;


二.你常用的Flex框架是什么?简述一下它的特点。
mate.
特点:Flex应用是基于事件驱动的,而Mate框架使其变得更加得简单,Mate允许用户定义是谁正在管理/处理这一事件,以及数据是否需要从服务器端返回,或者其他的什么事件需要被触发,所有的这些都使得Flex应用的开发变得更加得简单。

三.Flex是如何与flash协作的?
实现编码与设计的好处是显而易见的:

1.代码易于维护与二次开发。所有AS代码以面向对象的思想在flash外部组织,用notepad即能打开。比起传统的as2分散于frame之间,以及更早的分散于影片与按纽之上,其优点好处不言而喻。

2.设计独立于代码之外。可以在没有程序员的清况下,修改程序(系统) 的外观,亦可以新做一批theme;程序没有变,只是改改图片和排列位置,大小等,就可以迅速焕然一新。譬如,在春节时,加一些春节的时令元素进去,这将是一件很容易做的事情。

四.如何提升Flex运行效率,请从各方面进行简述。

1、避免容器的多级嵌套,减少相对尺寸、相对定位的使用。
在使用百分比来给容器内的元件定尺寸,一旦容器中的任何一个元件的位置和尺寸变化,都会引发容器对所有子级的重定位动作。如果嵌套的级别很深,这个计算量会很大。

2、尽量使用轻量级的容器
Canvas是体积最小的容器,它只支持绝对定位。很多时候,都可以使用它来代替HBOx和VBox。另外,Canvas也是我们编写自定义容器性质组件的一个首选。它具有容器的基本功能,利于扩展。

3、避免使用大体积的组件,比如DataGrid、AdvancedDataGrid
大个子组件的功能强大,但开销也是非常大的。由于功能的复杂性,使得皮肤、样式、itemRenderer的实现都格外复杂。

4、处理数据时多用分页的方式
在使用数据类型控件时,尽量减少数据一次的显示量。比如TileList,它会把数据一次性全部创建,不管是不是需要显示,这样很浪费资源。 ViewStack 、TabNavigator等在处理元件时,并不是一次创建,只要元件在第一次被显示时才创建,这样,就避免的不必要的开销。

5、setStyle和styleName
Flex 组件的皮肤都是可视化元件,组件在自身初始化时,会使用当前的样式比如styleName完成所有皮肤元件的绘制。如果我们在运行期间通过 setStyle修改了组件的样式,组件的尺寸、位置就会作相应调整。联系到第一条,如果组件位于一个层级很深的容器中,也会有一个大的计算量。

分享到:
评论

相关推荐

    Adobe Flex 3 高级编程 源码

    《Adobe Flex 3 高级编程》一书是学习Flex 3开发的权威指南,提供了深入的理论知识和技术实践。 该书的源码包含在名为"ProFlexCode"的压缩包文件中,意味着读者可以深入研究和学习书中提到的各种示例和项目。源码...

    flex高级日历应用类

    标题中的“flex高级日历应用类”指的是使用Adobe Flex技术构建的一个复杂日历应用程序。Flex是一种基于MXML和ActionScript的开源框架,用于构建富互联网应用程序(RIA)。它允许开发者创建具有丰富用户界面的Web应用...

    flex高级编程源码,flex红皮书源码

    "Flex高级编程"和"Flex红皮书"是两本针对Flex开发者的专业书籍,它们提供了深入的技术指导和实践案例,帮助开发者提升在Flex平台上的编程技能。 "Flex高级编程源码"这部分内容可能涵盖了Flex框架的核心概念,如组件...

    Flex3高级教程(经典)

    Flex 3的高级教程主要涵盖了以下几个关键知识点: 1. **Flex SDK与Flex Builder**:讲解了Flex SDK的基本构成和使用方法,以及如何通过Flex Builder这一强大的集成开发环境(IDE)提高开发效率。Flex Builder提供了...

    wrox的《flex高级编程》源代码

    《Flex高级编程》是Wrox出版社出版的一本深入探讨Adobe Flex技术的专业书籍,深受开发者喜爱。这本书通过详尽的实例和源代码,帮助读者掌握Flex的高级应用,从而提升开发能力。提供的源代码包含了多个章节的实践项目...

    Flex 3高级动画编程

    本主题聚焦于Flex 3中的高级动画编程,这是一门深入研究如何通过ActionScript在Flex环境中创建复杂、动态和交互性高的视觉效果的技术。 在Flex 3中,动画主要通过ActionScript实现,而不是使用图形设计工具。...

    Flex资料大全(Flex白皮书 Flex cookbok Flex编程指南 Flex设计模式等)

    Flex编程指南可能详细阐述了Flex开发过程中的核心概念和技术,如ActionScript 3.0语法、MXML组件模型、数据服务集成、移动应用开发等方面,帮助开发者掌握Flex编程的基础和高级技巧。 4. **client_server_...

    Flex3高级图表开发指南

    通过对这些知识点的深入学习,开发者不仅可以掌握Flex 3的高级图表功能,还能提升在数据可视化和RIA开发中的专业能力。书中的PDF文档应该包含了详细的示例代码和丰富的图解,方便读者跟随教程逐步实践。通过这本书,...

    flex高级教程

    这个“flex高级教程”显然聚焦于深入理解和应用Flex的技术特性,特别是对于那些已经有基础的编程开发者而言。让我们逐一探讨其中可能涵盖的知识点。 1. **Flex架构**:首先,我们需要理解Flex的架构,包括它如何...

    记事万年历flex源码

    这种增强的用户体验通常通过灵活的布局管理、自定义组件设计和高级的图形功能来实现,这些都是Flex框架擅长的领域。 在Flex中,我们可以利用以下技术点来构建这样的应用: 1. **MXML**:这是一种声明式的标记语言...

    flex教程_chm

    在Flex 4.0版本中,引入了全新的Spark组件模型,与之前的 Halo组件相比,Spark组件提供了更高级的定制能力和更好的性能。此外,Flex 4.0还引入了Skinning和States机制,使得界面设计更加灵活,能够根据不同的应用...

    Flex企业应用开发实战.rar

    最后重点探讨Flex应用性能优化等方面的高级知识。值得一提的是,本书公开了作者努力开发出来的、经实际项目检验过的Flex企业应用框架的源代码,具有非常高的参考价值。 本书对Flex的基础知识着墨不多,所有内容都...

    flex组件之DataGrid高级用法实例源码

    本文将深入探讨Flex DataGrid的高级用法,通过实例源码来解析其核心特性,帮助开发者更好地理解和应用这一组件。 一、DataGrid组件基础 DataGrid组件是Flex中的一个表格控件,它能够显示二维数据集,如...

    Flex3高级图表开发指南.rar

    《Flex3高级图表开发指南》是一本专注于使用Adobe Flex 3技术进行高级图表开发的教程。Flex 3是Adobe公司推出的用于构建富互联网应用程序(RIA)的开发框架,它基于ActionScript 3语言,提供了丰富的组件库和强大的...

    《Flex与ActionScript程序开发》[PDF]

    本书主体分为5个部分,分别从基础知识、视觉设计、组件高级技法、性能优化和Flex通信5个主要方面进行Flex知识的讲解。  本书由易到难、由浅人深、循序渐进地介绍了Flex与ActionScript3程序开发的一般步骤与常用的...

    [Flex与ActionScript.3程序开发].陈爽,付凯.扫描版

    内容简介 《Flex与ActionScript 3程序开发》主体分为5个部分,分别从基础知识、视觉设计、组件高级技法、性能优化和Flex通信5个主要方面进行Flex知识的讲解。 《Flex与ActionScript 3程序开发》由易到难、由浅人深、...

    Flex电子教案PPT

    Flex利用Flash Player或Adobe AIR运行时环境在浏览器中提供这些高级交互。 7. **Flex的应用场景**:Flex广泛应用于企业级应用、数据可视化、实时数据展示、电子商务网站、在线学习平台等。它的强项在于创建数据驱动...

    Flex第一步

    #### 四、Flex高级特性详解 Flex还包含了一系列高级特性,进一步增强了其开发能力: - **皮肤系统**:允许开发者自定义组件外观,提高界面美观度。 - **动画效果**:利用Flex内置的动画类库,可以轻松实现复杂的...

    FLEX学习资料,从零基础开始学FLEX

    FLEX基础知识** FLEX的核心组成部分包括Flex SDK(软件开发工具包)和Flex Builder(开发环境)。Flex SDK包含了编译Flex应用程序所需的所有工具和库,而Flex Builder则是一款基于Eclipse的集成开发环境(IDE),为...

Global site tag (gtag.js) - Google Analytics