Adobe AIR简单的缓存技术

为了解决网络加载数据缓慢提高用户体验,如何解决这个问题,有两种思路。

Pointillism最近发布的移动app,解决了那些边远地域[remote area]的用户使用游戏的问题。
一是预加载游戏可能会用到的所有内容。

 要么将所有数据/图片与应用一同打包,要么强迫用户在启动App的时候立即下载相关数据。

另一种方法是部署某种形式的缓存策略

图片缓存超简单,Dan Florio (PolyGeek)写了个名为ImageGate的组件,实现了Image组件和缓存机制。这个组件很好上手,只要在你MXML或ActionScript中将<s:Image>替换为他的组件即可。这样一来,查看的图像就会被缓存。我将他的组件做了些调整,发在了我的Apache空间上。我将Image组件替换为BitmapImage,并在iOS设备上的适当位置增加了一个小补丁以支持图片缓存。

缓存数列难度不会提升太大。AIR有个内置的“写入磁盘”功能——SharedObjects。SharedObjects最初是作为替代浏览器中cookie的存在,而在AIR里帮助我们将变量长期存储。每当有数据从服务器返回,我变将它作为SharedObject存储起来。这是一个非常好的策略,允许我们即刻显示旧数据并在当下实时更新新数据。我们的数据的更改并没有那么频繁,最多可能就只是一天更新一次罢了。

选一个数据管理器的构造函数来看:

  

View Code
1 so = SharedObject.getLocal("org.pointi.cache");
2 if (so.data.pointsList == null)
3 {
4 so.data.pointsList = new Array();
5 so.flush();
6 }

服务器返回数据时,进行:

View Code
1 so.data.pointsList[curHuntID] = event.result as ArrayCollection;
2 so.flush();

最后,当我们想读回数据,以下就是所有需要做的(pointsList是一变量,要发送到我们所要调用的组件):

View Code
1 ro.getPointList(huntID, userID); //call the remote function on the server
2 if (so.data.pointsList[huntID] != null)
3 {
4 pointsList = so.data.pointsList[huntID] as ArrayCollection;
5 }

对所有数列做类似的设置,我们就可以保持服务器与客户端同步。

 

 

原文地址:https://www.cnblogs.com/ztdy/p/2731749.html