Flex移动开发技巧--第一部分:数据处理
这是一个由多个部分组成的系列文章的第一部分,它包含了Flex移动开发的若干技巧。如果你过去习惯于桌面和Web编程,你会发现,开发移动应用程序将面临一系列新的挑战。 除了重新思考你的对数据存储和处理的策略,你还需要考虑屏幕尺寸和分辨率,而且需要在管理性能和电池消耗之间做出取舍。本系列文章将通过提出克服这些新的开发挑战的技术来帮助你轻松地过渡到移动开发领域。 数据处理是移动开发涵盖的一个方面,它需要传统的应用程序开发人员采取不同的思维方式。例如,对于许多移动应用程序来说,当用户关闭应用程序或切换到其它应用程序时,或当收到来电时,或当应用程序由于其它一些原因被迫关闭时,保存数据是非常重要的。 此外,移动应用程序的视图常常被销毁并重新创建。 因此,你需要思考如何处理你的视图之间的数据。因而,你需要用于保存数据的两个场景方案是:
本文介绍几种处理这些场景的方法。 使用destructionPolicy属性处理视图之间的数据在深入讨论在视图之间浏览时处理保存数据的不同方法之前,必须了解 View的生命周期。在Flex 4.5中,在任意给定时刻只有一个View是处于激活状态。默认情况下,所有其它的View将予以销毁,并在需要时重新创建。 这种行为是由View类的 考虑如图1所示的图。默认情况下(或当你明确地设置
图1. 在 Flex 4.5中创建和销毁视图
注意即使你在一个View中设置
图2. 第二次推入View B 将会导致该视图重新创建
我创建了一款简单的应用程序,它在 View 1启动然后调用
使用data属性处理视图之间的数据另一个(在我看来更加直观)用于保存视图之间数据的选项是在View对象中使用 你还可以通过在View中覆盖 override public function createReturnObject():Object { return person; } ? 在本范例中, package model { [Bindable] public class Person { public var person_id:int; public var userid:String; public var password:String; public var fname:String; public var lname:String; public var city:String; } } ? 一旦回到 ViewA之后,你可以使用下面代码访问返回的对象: data = navigator.poppedViewReturnedObject.object; 由于对象类型实际上是 ViewReturnObject,因此你必须指定object 属性以便获得相应的值。 在应用程序执行之间保存数据你有若干在应用程序之间保存你的数据的选项,因此当应用程序在关闭之后重新启动时可以获得相应的数据。Flex 4.5 具有一种内置的保存机制,通过 ViewNavigatorApplication 或TabbedViewNavigatorApplication中的一个名称为 当使用这一技巧时,你的根应用程序标签与下面代码相似: <?xml version=”1.0” encoding="utf-8"?> <s:ViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" firstView="views.SampleDataPersistenceHomeView" firstViewData="{person}" persistNavigatorState="true" navigatorStateSaving="onStateSave(event)" navigatorStateLoading="onStateLoad(event)" > ? /Applications/Adobe Flash Builder 4.5/sdks/4.5/frameworks/projects/mobilecomponents/sr 当你设置 在使用 Flash Builder 仿真器运行你的应用程序之后,你可以通过在你的硬盘上寻找相应的本地共享对象查看保存的数据。 在我的Mac中,该文件的路径是: /Users/hollyschinsky/Library/Preferences/DataPersistence.debug/Local Store/#SharedObje
图3. 在 FXAppCache 本地共享对象中保存数据
? 如果你需要保存一个自定义类,例如在上面范例中提及的Person类,你必须在主应用程序中侦听 protected function viewnavigatorapplication1_preinitializeHandler(event:FlexEvent):void { flash.net.registerClassAlias("person",model.Person); } 当你将 persistenceManager.setProperty("hollysProp","myProperty"); // set my own custom property persistenceManager.getProperty("hollysProp"); // retrieve the value for my property 如果你从一个View访问它,则你可以使用: FlexGlobals.topLevelApplication.persistenceManager.getProperty("person"); //Retrieves 要想了解内情,你可以打开调试器,然后看一看
?
图4. 调试器中的persistenceManager变量
你可以看到在默认情形下还能够保存两个传统的属性:
versionNumber 和
navigatorState ,这可以用于将视图回复到它们以前的状态。
使用默认 PersistenceManager的主要缺点是数据不能加密。然而,你可以免费使用 IPersistenceManager 接口来定义一个自定义保存数据的机制。因此,你可能希望实施一种本地加密存储方式以便获取和设置敏感数据。另一个次要缺点是在某些情形下,该机制仅适用于少量数据。如果你需要保存大量数据,你应该使用SQLite替代上述方式。关于一篇仔细分析如何创建能够与SQLite数据库通信的移动应用程序的优秀文章,参见Christophe Coenraets的利用Flex和Flash Builder创建一个移动雇员号码地址簿范例(Building a mobile employee directory sample with Flex and Flash Builder)。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |