针对移动网络设备移植和优化Adobe AIR应用程序(三)

来源:互联网 发布:数据冗余错误 编辑:程序博客网 时间:2024/04/28 01:46

                        

用户事件与帧率

根据舞台的帧率和用户事件的创建情况,Flash播放器中的帧与帧在用户操作部分的执行并非始终一一对应。

                 2

                                图 2Flash的帧创建和帧率

Frame:

在图2中我们可以看到,根据帧率,创建一个帧的过程中可能会多次调用用户代码。通过反复修改可视对象响应定时器的用户代码可能会浪费宝贵的时间,原因是它操作的对象在下一次调用用户代码之前不会呈现出来。类似地,占用过多时间的用户代码将延迟帧的呈现,而且可能会锁定界面或者表现出奇怪的行为。

为了解决这些可能出现的问题,需要将处理任务划分为较小的块。

将处理任务分块

了解帧组装过程可以帮助您在很大程度上增强应用程序的性能表现。为了让用户界面表现得始终能够操作,可使用“分块”技术将大型计算或繁重的初始化任务划分到多个帧上。对于用户而言,显示工作正在处理的动画比显示锁定的感觉要好的多。

繁重的呈现任务也应该划分到多个帧上。将大型计算划分到多个帧上呈现并不会加快程序的执行速度,但可以提供用户事件处理以让显示保持工作状态,而且当后台发生什么事情时还可以显示可视化的提示。

3中给出了典型“分块”算法的伪代码。

                                             3

 

3. 分块示例。

在这个例子中,我们的CPU密集型工作是在doWork()函数中完成的。doWork()函数必须设定为只完成要求的部分工作就返回。

如果已经超过我们在常量TIME_LIMIT中设定的时间限制,但工作尚未完成,我们启动定时器并释放线程,从而让帧可以呈现。如果尚未超过时间限制,那么我们继续调用doWork()函数。

呈现显示对象

呈现性能是用户能够清清楚楚看到的,特别是在图形密集型应用程序中,Flash编程就是一个典型的例子。如果呈现快速而流畅,用户就会感到高兴;如果图像呈现很慢、不平稳或行为奇怪,用户就会觉得厌烦,并理所当然认为应用程序的执行不正常。

从我们对于Flash中基本的帧事件序列的描述来看,似乎开发人员在应用程序中对显示对象的执行和呈现速度影响很小或者根本没有影响。然而,开发人员在应用程序开发过程中所做的选择,特别是在使用Flex提供的各种显示对象方面的选择,对于应用程序的呈现速度有着显著影响,因此对于应用程序的性能也有很大影响。

特别是对于MID设备的开发人员,显示和图形硬件的限制让他们必须更加详细检查呈现阶段。但在我们检查Flex应用程序中的特定呈现阶段前,我们首先需要分析影响应用程序中所有帧的问题。

管理应用程序的帧率

检查Flash显示的总体性能时,一个需要考虑的重要事项是为应用程序选择合适的帧率。记住,我们的用户代码将在帧事件循环执行过程中被管理,我们需要选择的帧率既不能过低也不能过高,过低会导致行为迟缓或古怪,而过高会导致出现不必要的事件和呈现循环。

考虑帧率的上限时,开发人员需要考虑他们显示器的基本帧率:60HZ。如果显示器的刷新速度无法达到每秒60次以上,那么呈现速度就无需高于这个数字。开发人员一般选择这样的帧率——只要能让他们希望一次显示的最大图形数,以动画的形式流畅地呈现出来,而不会选择更高的帧率。

另外,开发人员应该仔细考虑在何时何地操作当前显示列表中的对象。用户事件中发生的操作永远看不见,因为它们在下一帧呈现之前会被另一个事件处理程序覆盖掉。一般而言,最佳实践是只操作DisplayObject或其容器上的Event.enterFrameEvent.render事件。因为这些事件每帧只会发生一次,不必要的操作将最有可能被消除。

 

有关Moblin的更多内容,请访问:Moblin中文站

原创粉丝点击