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

                                 

基于多帧对多个显示对象进行排队

开发人员可以使用另一种技术让带有大量可见对象的屏幕图像创建变得流畅,这种技术就是利用排队的容器创建策略。默认情况下,Flex在尝试加载指定屏幕图像上的所有可视化对象时,会显示一个进度条。如果允许Flex基于多帧对对象创建排队,应用程序的加载时间好像明显缩短。尽管显示的总时间没有变,用户能够更快地看到应用程序的布局,这允许最后的显示对象一创建好便呈现出来。

4显示了在应用程序的.mxml文件中使用这种方法的一个简单例子。

 

                    4

4. 基于多帧对多个显示对象创建进行排队。

设置creationPolicy = “queued”,允许应用程序框架基于多帧分解可视对象的创建过程,同时允许加载状态早点结束。对象的创建顺序默认为声明它们的顺序。通过使用creationIndex 属性,可以强制排队的创建按照数字顺序初始化,而不管声明顺序如何。

其他呈现技巧

使屏幕图像平滑过渡

对于要在屏幕之间过渡的应用程序,提前创建和缓冲显示对象可以让图像过渡变得平滑。缓冲显示对象不仅让应用程序的屏幕过渡更加平滑,而且还可以减少操作DisplayObject派生类时特别突出的内存碎片化问题。

只呈现要可视的部分对象

需要只在屏幕上显示可视对象的一部分时,要使用ScrollRects代替MasksMasks需要在确认视图之前呈现整个可视对象,而ScrollRects可以比照边界框来剪辑视图,只呈现对象的可视部分。然而,为了让对象能够利用ScrollRects进行优化,必须将cacheAsBitmap属性设为true才能避免二次呈现。

呈现阶段

了解呈现过程的底层阶段很重要,因为开发人员的应用程序中的瓶颈可能出现在任意或所有阶段中,导致应用程序的速度或性能大幅下降。呈现过程的优化总体上需要开发人员进行一些实验,但了解呈现过程的不同阶段所处理的工作,将有助于指出潜在的问题。

Flash中的呈现出现在三个不同阶段:布局、光栅和合成。

布局

在呈现的布局阶段中,布局管理器负责处理舞台上包含的所有显示对象。首先,它必须计算文本位置,并利用字体信息计算文本对象的尺寸和流动。布局阶段中的下一步是计算舞台上所有DisplayObjects的所有父/子关系。每个子对象必须位于其父对象的坐标中,直到坐标可以转换为最终可见的图形层。一旦沿着目前变平的DisplayObjects坐标确定了图形层的大小,布局管理器可以确定位于可见区域的对象,并把这些对象传递给光栅。

光栅

呈现过程的光栅阶段接收布局阶段认为可见的所有对象,然后对它们进行处理,将它们绘制在屏幕上。矢量对象必须转换为位图,并对边缘和描边线应用反锯齿算法,让它们在屏幕上看起来更加平滑。此时还要将字体转换为位图,同时也对它们应用反锯齿算法。

开发人员应该记住的一个重要事实是,实心对象,如实心圆,只需要对一条边进行反锯齿处理,而描边对象需要进行额外处理,因为它们需要对两条边进行反锯齿处理——描边的两侧各处理一次。标记为不可见的对象将被光栅忽略掉,而alpha水平为零(完全透明)的对象仍然会被光栅化。

合成

呈现过程的最后一个阶段是合成。合成阶段负责汇集来自光栅阶段的所有位图,将它们与缓冲的位图对象组合在一起,然后传送到最后阶段上下文中,由布局管理器在呈现过程首个阶段中计算出来的位置。

使用DisplayObject上的cacheAsBitmap属性时,会将特定显示对象和包含的任意对象保存到合成链中。当特定的DisplayObject层次结构在舞台上没有改变或移动太多时,可以使用这项技术。但如果对象频繁大幅改变,cacheAsBitmap对于应用程序性能会产生副作用,因为它需要在内存中呈现和保存DisplayObject。开发人员应该自己找到使用缓存位图的正确平衡。

绕过功能以提高呈现速度

即使FlashActionScript3提供了一套丰富的面向对象工具,用于在屏幕上进行快速而高效的呈现,真正图形密集型的应用程序可能需要绕过一些语言功能,以便满足应用程序对于性能的要求 ,特别是在使用MID设备的环境中。

减少DisplayObject开销

通过限制显示对象中的层次结构并使用容器,可以缩短呈现过程中的布局与合成阶段。这些限制生成的DisplayObject层次结构或多或少有些平面化,把布局管理的工作留给了开发人员来完成。这项技术对于显示对象相对较多或者包含深层层次结构的应用程序最为有用。可以利用一个DisplayObject派生类中的图元,而不必创建多个对象。这样做有几个优点:布局和呈现速度更快,占用内存更少,而且应用程序的启动速度也更快。

慎重选择矢量和位图

设计复杂的图形界面时,要考虑的另一个因素是到底使用矢量还是位图。位图的绘制时间不变,而矢量的绘制时间不定。位图能够跳过呈现过程的光栅化阶段,而矢量对象由于其复杂性,可能需要光栅化和大量反锯齿处理。

位图占用内存更多,但稍后可以重用该内存,特别是当开发人员缓冲了显示对象,以便在应用程序的生命周期内稍后进行重用时。位图还具有允许开发人员在后期处理效果中编辑处理的优点,从而不需要在运行时进行显示过滤。

然而,矢量的缩放和旋转都比位图对象更加高效,当界面面向可视化操作时,通常也更具美感。

小结

MoblinAtomFlashAIR的组合为针对移动网络设备开发和部署富Internet应用程序创造了一个高度兼容的优秀平台。由于移动网络设备的资源有限,包括事件队列循环处理、呈现、ActionScript 3代码执行和内存利用在内的优化就变得特别重要。

在本文的第2部分中,我们将讨论对于ActionScript 3代码执行和内存利用的性能优化。请继续关注!

 

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值