`
keren
  • 浏览: 1585243 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Flex事件机制

    博客分类:
  • Flex
阅读更多
转:http://hi.baidu.com/doltcat/blog/item/9a22e22a5221952bd52af13e.html
很多开发人员都知道如何使用事件机制,但却不理解事件机制的基本工作原理。在这里我们探讨一下ActionScript 3的事件机制(无论是新手还是老手,我相信看到最后肯定对你有所帮助 )。
1. 首先来看一下事件机制中的几个基本概念:

event objects(这里我们姑且叫它事件对象):所有的事件对象都是flash.events.Event或者其子类。比如说鼠标事件MouseEvent,计时器事件TimerEvent。每个事件对象中都包括事件类型(type)和事件源(target),便于event listener知道该事件的类型以及是谁抛出这样的事件。
event dispatchers(姑且叫它事件源):是事件发起的主体。所有的dispatcher都是EventDispatcher或其子类。事件触发源必须提供API让listener进行对该事件的注册(register)。
event listeners(姑且叫它事件监听器):在AS 3.0中它往往表现为一个函数。我们必须为每个特殊的事件和事件源注册一个监听器,当事件发生的时候,事件源(dispatcher)会通知该监听器去处理制定的事件。
2. 如何注册监听器(registering Listener)
在AS 3.0中可以通过下面的语法格式进行注册。
dispatcher.addEventListener(eventName, listener);
当然在Flex中还有另外一种格式,在mxml文件中对一个控件的事件直接制定一个处理函数,如
<mx:Button label="TestClick" click="clickHandler()"/>

3. 如何删除监听器(removing Listener)
在AS 3.0中以下面的格式进行删除
circle.removeEventListener(MouseEvent.CLICK, onClick);
应该很容易理解。
但这里确有一点很重要:尽量删除你已经不再使用的事件监听器,这个涉及到Flex 内存泄漏的问题,以后会有详细介绍。

4. 理解事件阶段(Event Phases)
我们把事件触发源分为两类:一类是那些显示在界面中的元素抛出的事件,一类是那些不在界面中显示的元素抛出的事件。很简单,举个例子:第一类如URLLoader对象去load图片或其他资源所抛出的如complete事件,就属于第一类。界面上的一个按钮所抛出的click事件就是第二类,它会触发一个事件流,引发一系列的事件,它又分三个阶段:捕获(capture),执行(target) 和冒泡(bubble),姑且这样表达这三个阶段。

捕获阶段(capture)
在这个阶段,Flash Player会去查找事件的触发源,它是通过根显示元素(root display object)逐层向下寻踪,直到找到事件的发起源头,如你在button上click后,Flash Player找到的事该button对象。在这个阶段监视器(listener)默认是不会收到任何消息的(默认只在target和bubble阶段收到消息)。
如果你想在捕获阶段让listener收到消息并有所动作,那么你可以在注册的时候改变第三个参数为true,如下面的方法:object.addEventListener(MouseEvent.CLICK, onClick, true);
该阶段听起来很陌生,事实上它很少使用。但它却在事件流中扮演很重要的角色。它可以在事件到达子元素(child elements)之前被application捕获,当然也就可以阻 止事件到达子元素。
目标执行阶段(target)
在这个阶段是事件的执行阶段,也就是我们常用的用来处理事件流的代码。
冒泡阶段(bubble)
最后的这个阶段其实就是第一个阶段的逆向过程。它就是在事件代码执行完毕后通过子元素逐级向父元素发出该事件,一直到根元素。在这个阶段你不需要特别的为监听器指定什么,你只要正常的注册事件就可以了。监听器会在该阶段收到通知。但前提是该事件是能够bubble的。
5. 事件的优先级(Event Prioriy)
事件优先级我们用的很少,但理解它却很重要,但你添加一个事件的时候你可以设置监听器的优先级,优先级越高,你的监听器函数会越早被调用到。当然两个优先级相同的监听器是根据他们被添加的顺序来决定优先级的。这个优先级指的是在同一个事件阶段(如capture,target,or bubble).一次,事件处理的优先级是先看阶段再看优先级的。

6. 弱引用(Weak Reference)
弱引用时事件处理中非常重要的概念。要理解它为什么这么重要,你首先要理解Flash Player是如何进行垃圾回收的(garbage collection).

顾名思义,垃圾回收就是回收那些不再使用的资源,主要是内存资源,否则会致系统崩溃。

Flash Player是通过引用计数器(reference counting)以及标记与清除(mark and sweep)来实现垃圾回收的。
引用计数器简单的讲就是给每个对象分配的技术器,一旦该对象的计数器为0时,就表示该对象可能不再被使用,可以安全的清除了。它的弊端就是不能解决循环引用问题,一旦出现循环引用,就不能通过该方法进行垃圾回收。
而标记与清除(mark and sweep)就是为了解决循环引用问题的。它是通过在程序中遍历每个活动的、可到达的节点,一旦发现一些节点是处在活动节点之外的,就被认为不再有用,就可以被回收了。
这两种机制是联合运行在垃圾回收过程中来保证正确回收资源。但他们并不能回收程序错误导致的垃圾。而监听器的注册就最容易导致这个问题的发生。
分享到:
评论

相关推荐

    Flex事件机制详细说明

    ### Flex事件机制详解 #### 一、事件简介 在Flex框架中,事件是应用程序与用户交互的核心机制之一。它可以由多种触发源启动,包括但不限于用户的输入(如键盘按键、鼠标点击)、外部数据加载完成(例如WebService...

    Flex 事件机制,flex入门学习

    【Flex 事件机制详解】 Flex 事件机制是 Flex 应用程序中不可或缺的一部分,它使得组件之间能够有效地通信,响应用户交互以及管理应用程序状态。在深入理解 Flex 事件机制之前,我们需要先了解一下基本概念。 1. *...

    Flex事件机制(通俗易懂)

    ### Flex事件机制详解 #### 一、引言 Flex是一个强大的框架,用于构建高性能的Web应用程序。对于初学者而言,理解和掌握Flex中的事件机制是非常重要的一步。本文将深入探讨Flex事件机制的基础概念、事件注册通道、...

    flex事件机制的demo

    Flex ActionScript3.0事件机制的Demo, 举例说明了事件的三个阶段,事件的派发,事件的侦听,事件的拦截,自定义事件等相关知识点. 以上知识点在Demo中都有体现,初学者请仔细分析代码,加强理解,多调试、修改、验证以加深...

    flex事件机制分析

    Flex事件机制是Adobe Flex应用程序中处理用户交互和组件通信的核心组成部分。它主要涉及事件流、事件处理程序以及事件对象的概念,这些在构建富互联网应用程序(RIA)时扮演着至关重要的角色。下面将对这些概念进行...

    flex事件机制的分发

    Flex事件机制是Adobe Flex框架中一个关键的概念,它允许组件之间通过事件进行通信。在Flex中,事件机制的分发主要包括三个主要阶段:捕获阶段、目标阶段和冒泡阶段。下面将详细介绍这些阶段以及自定义事件的创建与...

    Flex的事件机制笔记

    Flex事件机制是Adobe Flex应用程序开发中的核心组成部分,它允许组件之间进行有效的通信和交互。对于初级Flex程序员或爱好者来说,理解这一机制至关重要。在本文中,我们将深入探讨Flex事件的各个方面,包括事件流、...

    FLEX 事件机制-自定义事件介绍

    在Flex编程中,事件机制是实现组件间通信和交互的关键部分。自定义事件允许开发者创建特定于应用的事件类型,以便更好地控制数据流动和响应处理。以下是对FLEX自定义事件的详细介绍: 首先,自定义事件是通过继承...

    关于flex事件的讲解.rar

    Flex事件机制是Adobe Flex框架中的核心组成部分,它允许开发者创建响应用户交互的动态应用程序。在Flex中,事件处理是通过事件监听器来实现的,这些监听器可以注册到UI组件或者应用程序本身,以便在特定事件发生时...

    关于flex事件的讲解

    ### 关于Flex事件机制的深度解析 #### 一、引言 在Flex开发过程中,事件机制是理解应用程序交互的关键所在。对于许多初学者而言,掌握Flex中的事件处理机制显得尤为重要。本文将详细介绍Flex中的事件机制及其应用...

    flex的事件详解

    通过以上分析,我们可以看到Flex的事件处理机制不仅强大且灵活,而且遵循标准,易于学习和使用。无论是在构建复杂的用户界面还是实现复杂的业务逻辑方面,事件都起着至关重要的作用。掌握Flex的事件机制,有助于...

    Flex4.5事件机制

    Flex4.5事件机制是Flex应用程序开发中的核心组成部分,它基于ActionScript 3.0的事件模型,并且遵循DOM3级事件规范。事件机制使得开发者能够轻松响应用户交互和系统事件,为Flex程序员提供了强大且直观的处理工具。 ...

    flex-event.zip_flex

    Flex事件机制是Adobe Flex应用程序开发中的关键组成部分,它允许组件之间进行有效的通信和状态管理。在Flex中,事件是用于传递信息的结构化对象,它们从一个源头(通常是组件)发送到其他感兴趣的接收者(监听器)。...

    flex事件讲解

    阅读这份文档将有助于深入理解Flex事件机制,并在实际开发中更高效地利用它们。 总之,理解Flex的事件模型对于创建响应式和高效的RIA至关重要。熟练掌握事件处理可以让你的Flex应用程序更加互动,提升用户体验。...

    flex 事件学习

    Flex事件学习是Adobe Flex框架中的一个重要组成部分,它允许开发者创建响应用户交互的动态应用程序。Flex事件模型基于ActionScript 3.0的事件模型...通过实践`EventDemo1`这样的示例,你可以更深入地掌握Flex事件机制。

    flexevent.rar_flex

    Flex事件机制是Adobe Flex应用程序开发中的关键组成部分,它允许组件之间进行通信,处理用户交互,以及实现复杂的逻辑。本文将深入探讨Flex事件的基础知识、事件模型、事件生命周期、事件监听器,以及如何自定义事件...

    用Flex+Java进行软件开发速成篇

    通过本文的学习,读者可以掌握Flex的基本概念和核心技术,特别是对事件机制的理解将有助于更有效地开发出响应式和用户友好的应用程序。同时,结合Java后端进行交互的能力也是现代企业级开发不可或缺的一部分。希望...

    Flex-Menual-CHN.zip_flex_flex 官方文档

    六、Flex事件机制 1. 事件:在Flex中,事件是对象之间的通信方式,如点击按钮、数据加载完成等。 2. 事件监听器:通过addEventListener方法注册,处理特定事件的发生。 七、Flex图形和动画 1. Flex提供了强大的图形...

    Flex晋级培训

    #### 一、Flex事件机制 Flex中的事件机制是其核心功能之一,用于处理用户交互及程序内部状态的变化。在Flex中,事件可以被看作是一种特殊的对象,它允许代码的不同部分之间传递信息。事件通常由用户界面元素(如...

Global site tag (gtag.js) - Google Analytics