提升Flex移动应用用户体验的技巧

随着移动设备和移动应用的普及,用户对应用的体验要求越来越高。Flex框架以其强大的功能和灵活性,成为开发移动应用的热门选择。本文将介绍一些实用的技巧,帮助提升Flex移动应用的用户体验

技巧一:控制应用程序的行为

对于从Flash转向Android开发的开发者来说,一个常见的误解是认为退出应用程序(例如按下Home键)会停止应用。实际上,应用仍在后台运行。需要意识到这一默认行为,并对其进行控制。

例如,AIR 2.5引入的Geolocation API可以实时返回位置坐标。在Android上,它直接利用操作系统的GPS API,这会消耗大量资源。以下是一个示例代码,展示了如何使用Geolocation API获取位置并显示纬度:

<?xml version="1.0" encoding="utf-8"?> <s:MobileApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" firstView="views.tip1quitHandlerHome" creationComplete="mobileapplication1_creationCompleteHandler(event)"> <fx:Script> <![CDATA[ import mx.events.FlexEvent; protected function mobileapplication1_creationCompleteHandler(event:FlexEvent):void { NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, onDeactivateApp); } protected function onDeactivateApp(event:Event):void { NativeApplication.nativeApplication.exit(); } ]]> </fx:Script> </s:MobileApplication>

在这种情况下,当用户返回主屏幕时,应用程序将被终止。也可以选择在Geolocation上移除事件监听器,并在Event.ACTIVATE触发时再次激活它。这为提供了前所未有的自由度和控制权。

技巧二:在推送视图前加载数据

这是由于新的MobileApplication架构导致的另一个常见错误。当需要从互联网下载数据时,不要在视图中调用服务。如果这样做,每次返回视图时都会发起一个无用的请求。更新主应用程序文件,以便在creationComplete事件中调用服务,并在结果事件中推送视图。

移除MobileApplication标签中的firstView参数,并在creationComplete事件中调用服务。当接收到resultEvent时,推送第一个视图,并将event.result对象作为ArrayCollection传递。

protected function operation1():void { Operation1Result.token = speakersDevoxx.Operation1(); } protected function mobileapplication1_creationCompleteHandler(event:FlexEvent):void { operation1(); } protected function Operation1Result_resultHandler(event:ResultEvent):void { navigator.pushView(views.tip2devoxxHome, event.result as ArrayCollection); }

可以查看视频,了解如何使用Flash Builder 4的数据向导在5分钟内构建一个连接到DEVOXX REST服务的应用。一旦数据加载完成,它将在视图之间持久保存。在示例中,获取了演讲者列表并将其存储在Array Collection中。当想显示有关演讲者的详细信息时,只需推送一个新视图,传递list.selectedItem对象。

技巧三:显示自定义标签

使用移动项目渲染器可以获得最佳的滚动列表性能。不要忘记,还可以在List中使用labelFunction参数,而不是经典的labelField。一个典型的用例是当想在列表中显示用户的全名。例如,如果只从服务中接收到名字和姓氏,那么使用这个简单的技巧。

<fx:Script> <![CDATA[ public function myFullName(obj:Object):String { return (obj.lastName + " " + obj.firstName); } protected function list1_clickHandler(event:MouseEvent):void { navigator.pushView(views.mySpeaker, list.selectedItem); } ]]> </fx:Script> <s:List id="list" width="100%" height="100%" dataProvider="{data}" labelFunction="myFullName" click="list1_clickHandler(event)"> </s:List>

这样,就可以在列表中显示用户的全名。

技巧四:始终声明启动屏幕

AIR应用程序总是需要一秒钟才能启动。FlexHero框架在当前的Preloader类中添加了一个调整,以在经典的加载体验之前显示一张图片。始终在主MobileApplication标签中声明一个启动屏幕(只是一个静态图像),以改善用户体验。用一张图片欢迎用户总是比黑色背景更好。

<s:MobileApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:speakersdevoxx="services.speakersdevoxx.*" creationComplete="mobileapplication1_creationCompleteHandler(event)" title="Loading..." splashScreenImage="@Embed('devoxxSplash.png')" splashScreenScaleMode="zoom">

这样,应用程序在启动时会显示一个启动屏幕,而不是黑色背景。

技巧五:检查屏幕方向

是Flex 4自定义布局的忠实粉丝。可以通过监听ResizeEvent来检测用户何时旋转屏幕。然后,可以根据屏幕方向(竖屏或横屏)更改与列表相关联的布局。

protected function checkOrientation():void { if (navigator.landscapeOrientation == true) { currentState = "landScapeView"; } else { currentState = "portrait"; } } protected function onResizeView(event:ResizeEvent):void { checkOrientation(); }

然后,只需声明应用程序的状态,以及与状态相关联的布局:

<s:states> <s:State name="portrait"/> <s:State name="landScapeView"/> </s:states> <s:List width="100%" height="100%" dataProvider="{myData}" itemRenderer="views.mySecondIR"> <s:layout.portrait> <s:TileLayout orientation="rows"/> </s:layout.portrait> <s:layout.landScapeView> <s:TileLayout orientation="columns"/> </s:layout.landScapeView> </s:List>

这样,就可以根据屏幕方向更改列表的布局。

技巧六:使用自定义布局

尝试使用自定义的coverflow布局,结果对Android设备的性能感到惊讶。可以查看视频,了解它是如何工作的。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485