Flex应用程序启动详解_jexchen博客_65b95065的博客-程序员秘密

技术标签: application  null  flex  Flex3 & As3  框架  actionscript  flash  

      编写一个简单的Flex应用程序并不复杂,就算你从来没接触过Flex程序设计,照着帮助的实例步骤,不需花多长时间也能做出一个漂亮简捷的小程序出来。不过,随着对Flex程序编写的深入,会越来越觉得,其实要编写一个好的Flex应用程序并不简单,涉及到各个方面的知识,需要对Flex应用程序的架构、事件机制的处理、设计与程序的结合等等各个方面均要有所掌握。

      接下来我会写一个系列文章,对Flex应用程序编写在上述方面所需掌握的知识作一个梳理,希望对大家有所帮助…

这第一部分的内容从Flex应用程序的启动与运行讲起。另外,Flex应用程序总的来说是以事件驱动的程序,因此,大家在深入学习Flex的各个方面知识的时候,应该随时以事件驱动的观点来进行思考。

      大家都知道,我们在编写Flex应用程序时,通常是以<mx:Application>标签作为开头,实际上,Flex应用程序在启动运行的时候并不是直接从Application开始运行,在这之前还有一部分悄悄的先运行了,正如大家所看到的,当我们运行编写好的Flex应用程序时,尽管我们没有编写任何与启动进度载入条相关的代码,但无一例外的,应用程序均会为我们自动加上这一部分。因此才有我们看到的如下图所示的标准的Flex loading载入条(在下一篇文章中,我们将一起来改变这千篇一律的载入条,创建自定义的loading效果)。

      loading

 

      通常我们所说的Flex应用程序,本质上来说是基于Flex框架、采用ActionScript 3.0编写的Flash应用程序,从这一点来说,它和普通的Flash应用程序没有任何差别。相对来说,传统的使用Flash IDE(如Flash CS3)创建Flash程序时更多的基于“时间线”(Timeline)及“帧”(Frame)的概念,更易于设计师理解;而基于Flex框架来创建的Flash应用程序更多是强调程序性,很少提及“时间线”与“帧”的概念,更易于程序员理解。其实Flex应用程序一样也有时间线,只是这部分由Flex框架隐藏起来了,通常不为大家所熟悉,在默认创建Flex程序时,这一切Flex已帮我们完成了,但了解这部分内容更有助于大家对Flex应用程序的启动有更深刻的认识,以便能对程序更灵活的控制与发挥~~

     application

      我们来看看上面这幅示意图,Flex应用程序共由两帧组成,第1帧为preloader部分,第2帧为主应用程序部分,此两部分由Flex应用程序的根SystemManager统管,SystemManager是flash.display.MovieClip的子类,影片剪辑(movie clip)支持帧。由于swf属于一种渐进式(progressive)下载的格式,正是由于swf格式这个特性,Flash Player并不需要等待整个程序下载完成便可直接访问已载入帧的内容,因此第一帧通常用来作为应用程序载入时的loading画面显示,一般来说,第一帧包含的内容应该尽可能的少(在第一帧中尽量不要含有Flex框架的组件),以便能很快的下载并立即显示;第二帧才是主应用程序真正的内容,一旦SystemManager实例进入到第二帧后,即开始内部主应用程序运行的生命周期(life cycle),也就是进入我们最为熟悉的<mx:Application>运行的部分(SystemManger实例有一application的属性,在第1帧时,此属性为null,当进入到第2帧时,该属性才指向真正的主程序application实例)

注:帧是时间线的一个基本单元,如PAL电视制式,每秒25帧;而电影通常为每秒24帧,其实和我们这里讲的Flash中的帧类似的概念

      记住我们开始所说的,Flex应用程序总的来说是以事件驱动的程序

      在程序进入第2帧,主程序application开始运行后,便会相应的触发相应的一系列事件,按事件发生的先后顺序依次来介绍:

      preinitialize

      应用程序application已实例化,但此时还未创建任何相关的孩子组件(child component)

      initialize

      此时,创建了相应的孩子组件,但还未对这些子组件进行布局

      creationComplete

      应用程序application完成全部实例化,并完成所有子组件的布局

      apllicationComplete

      上面三处事件的完成,表明application内部启动的整个进程完成,接下来便会通知SystemManager派发applicationComplete事件。此时,启动程序启动完成并准备运行。

      运行下面这个小程序,再次理解这几次事件,注意:由于在preinitialize事件产生时,此时还未创建任何子组件,故在此事件的处理函数中,不能直接将相应显示的字符串赋给TextArea组件显示。

点击运行程序(右键选择view source可查看源码)

 

出自:http://www.jexchen.com

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/accp_fangjian/article/details/3858640

智能推荐

Java跳过https的ssl证书验证的解决思路_南丘xf的博客-程序员秘密

打开简书首页,明显看到链接是https打头,https和http的通信协议差别,在于https安全性更高:http和https的差别.png很明显,二者最大的区别在于https多了一个ssl证书验证,可以说https是身披SSL外壳的http。因为http存在如下缺陷:1)通信使用明文,内容可能被窃听(重要密码泄露)2)不验证通信方身份...

纽约州立大学石溪分校计算机专业排名,纽约州立大学石溪分校美国大学排名及专业排名汇总(USNEWS美国大学排名版)..._Lorraine张的博客-程序员秘密

[纽约州立大学石溪分校]2021年USNEWS美国大学综合排名第88名[纽约州立大学石溪分校]2020年USNEWS美国大学综合排名第91名[纽约州立大学石溪分校]2019年USNEWS美国大学综合排名第80名[纽约州立大学石溪分校]2018年USNEWS美国大学综合排名第97名[纽约州立大学石溪分校]2017年USNEWS美国大学综合排名第96名[纽约州立大学石溪分校]2016年USNEWS美国...

感知哈希算法--实现图片搜索_Sabrina.M的博客-程序员秘密

“感知哈希算法”(Perceptual hash algorithm),它的作用是对每张图片生成一个”指纹”(fingerprint)字符串,然后比较不同图片的指纹。结果越接近,就说明图片越相似。下面是一个最简单的实现: 第一步,缩小尺寸。 将图片缩小到8x8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。 第二步,简化色彩。

Windows平台安装GDB调试器_gdb windows_哭哭啼的博客-程序员秘密

首先我们需要知道GDB调试器无法直接安装到Windows平台上,如果想在Windows系统中使用GDB调试器,需要一个中间媒介,常用的就是MinGW。MinGw全称MinimalistGNUforWindows,作用其实就是为我们在windows上搭建一个虚拟的linux环境。..................

GCD容易让人迷惑的几个小问题 ------ (转载自http://www.jianshu.com/p/ff444d664e51)_banhan7136的博客-程序员秘密

写在开头:本文旨在阐述一些大家容易产生迷惑的GCD相关内容,如果是需要了解一些GCD概念或者基础用法,可以看看这两篇文章:GCD 扫盲篇、巧谈GCD。目录:迷惑一:队列和线程的关系迷惑二:GCD的死锁迷惑三:以下这些API的异同与作用场景:dispatch_async、dispatch_sync、dispatch_barrier_async、dispatch_barrier_sync...

Redis分布式集群_slimina的博客-程序员秘密

Redis-2.4.15目前没有提供集群的功能,Redis作者在博客中说将在3.0中实现集群机制。目前Redis实现集群的方法主要是采用一致性哈稀分片(Shard),将不同的key分配到不同的redis server上,达到横向扩展的目的。下面来介绍一种比较常用的分布式场景:在读写操作比较均匀且实时性要求较高,可以用下图的分布式模式:在读操作远远多于写操作时,可以用下图的分布式

随便推点

解决linux配置ssh免密登录遇到的异常:-bash: cd: /root/.ssh: Not a directory_red-Rain的博客-程序员秘密

解决异常:-bash: cd: /root/.ssh: Not a directory事件场景:搭建了一个kafka集群,现在做脚本启动集群,发现需要做免密登录,在正常的免密设置中一台机遇到了该问题,花了不少时间解决所以记录一下一:免密登录的设置步骤原理:执行ssh-keygen生成秘钥 id_rsa.pub,将产生的id_rsa.pub放到authorized_keys文件,authorized_keys文件依次在集群中添加公钥id_rsa.pub,再覆盖之前集群里的authorized_keys,

C语言sendto()函数:经socket传送数据_剑西楼的博客-程序员秘密

相关函数:send, sendmsg, recv, recvfrom, socket头文件:#include   #include 定义函数:int sendto(int s, const void * msg, int len, unsigned int flags, const struct sockaddr * to, int tolen);函数说明:sendt

Spring的事务隔离级别和传播机制_文心-TONY的博客-程序员秘密

事务的ACID:1.原子性(Atomictiy):事务开始后所有操作 要么全部做完 要么全部不做 不可能停滞在中间环节2.一致性(Consistency):事务开始前和结束后 数据库的完整性约束没有被破坏  比如A向B转账 不可能A扣了钱 B却没收到3.隔离性(Isolation):同一时间 只允许一个事务请求同一数据 不同的事务之间彼此没有任何干扰 比如A正在从一张银行卡中取钱 在A取钱的过程结...

ArcGIS 每天一个高级制图技巧:5 lyr和UpdateLayer方法实现样式复用_gis的lyr文件可以转成style吗_GIS荟的博客-程序员秘密

直接复用 mxd 中已经制作完成图层的符号(即符号系统,图层的样式)是非常省时省力的,提高效率。而 ArcGIS 里贴心的提供了两种符号复用的方法:使用 lyr 图层和 arcpy 包中的 UpdateLayer 方法。

【每日一题】 1128. 等价多米诺骨牌对的数量_Zack_tzh的博客-程序员秘密

【每日一题】 1128. 等价多米诺骨牌对的数量避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述给你一个由一些多米诺骨牌组成的列表 dominoes。如果其中某一张多米诺骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的。形式上,dominoes[i] = [a, b] 和 dominoes[j] = [c, d] 等价的前提是 a==c 且 b==d,或是 a==d 且 b==c。在 0 &lt;= i &lt; j &lt; domin

推荐文章

热门文章

相关标签